2016-03-19 4 views
1

Мне нужен СУММ результатов запроса SELECT. Когда я не использую SUM, он показывает мне этот результат:SQL-запрос - SELECT в SUM

 CELKOVA_CENA 
-------------------------------------------------------------------------------- 
80 
80 
120 
120 
120 
80 
150 
80 
150 
120 
150 
120 
. 
. 
. 

Но когда я использую функцию SUM, он показывает мне ошибку:

ORA-00936: missing expression

Пожалуйста, как я могу это исправить?

SELECT SUM (
    SELECT n.hodnota 
    FROM evidn_nastaveni n 
    WHERE n.popis = 'cena_krakorce' 
    AND 
    n.upresneni = k.pozice) 
    AS celkova_cena 
FROM (
    SELECT oc.clen, oc.oddil 
    FROM evidn_oddily_clenove oc 
    INNER JOIN evidn_oddily o ON oc.oddil = o.id 
    WHERE o.nazev = 'Slalom') 
NATURAL JOIN evidn_krakorce k; 

Спасибо за ответы

ответ

1

Я думаю, что ниже подход должен дать результат в соответствии с вашими ожиданиями -

SELECT SUM(celkova_cena) 
    from (select (SELECT n.hodnota 
        FROM evidn_nastaveni n 
       WHERE n.popis = 'cena_krakorce' 
        AND n.upresneni = k.pozice) AS celkova_cena 
      FROM (SELECT oc.clen, oc.oddil 
        FROM evidn_oddily_clenove oc 
       INNER JOIN evidn_oddily o 
        ON oc.oddil = o.id 
       WHERE o.nazev = 'Slalom') NATURAL 
      JOIN evidn_krakorce k); 

Вам необходимо перекрестно проверить, что у вас нет дубликата v alue в таблице evidn_nastaveni (которая используется во внутреннем запросе) за popis = 'cena_krakorce' and upresneni = evidn_krakorce .pozice.

Если это так, то вам нужно использовать любую функцию агрегата (MIN/MAX/SUM) во внутреннем запросе.

0

Вы можете исправить вашу конкретную проблему, поставив sum() в подзапрос:

SELECT (SELECT SUM(n.hodnota) 
     FROM evidn_nastaveni n 
     WHERE n.popis = 'cena_krakorce' AND 
       n.upresneni = k.pozice) 
     ) celkova_cena 
FROM . . . 
+0

благодарит за ваш ответ. Но это не исправить. Ваше решение делает, что запрос делает SUM на каждой из строк. Так что, похоже, как это: CELKOVA_CENA -------- SUM (80) SUM (80) SUM (120) SUM (120) SUM (120) SUM (80) SUM (150) SUM (80) SUM (150) SUM (120) SUM (150) SUM (120) . . . Результат такой же. Мне нужно суммировать все значения вместе. Но спасибо за ваш ответ. У вас есть еще одна идея? – Kaspy