2013-04-04 2 views
1

Здравствуйте, я новичок в PL SQL, и я пытаюсь сделать запрос следующим образом:пл SQL, сделать выбор, только если

SELECT column1, sum (column2) 
FROM table1 
WHERE sum (column2) <> 0 
GROUP BY column1 

В основном то, что я хотел бы сделать, это выбрать только те строки, в которых сумма (column2), сгруппированная по столбцу 1, равна <> 0.

Этот запрос дает мне ошибку ORA-00934, которая имеет смысл, поскольку в предложении WHERE не указано, что операция суммирования должна быть сгруппирована по столбцу1 (или, по крайней мере, Я думаю, что это проблема).

Я пробовал различные решения, такие как:

SELECT CASE WHEN SUM(column2) <> 0 then (SUM(column2), column1) END 
... 

но пл-SQL не нравится.

Что работает бы:

SELECT column1, case when SUM(column2) <> 0 then SUM(column2) END 
... 

Но в данном случае я не совсем то, что я хочу, так как результат является pseudotable как один из SELECT, column1, SUM (COLUMN2) ... , за исключением того, что я вижу белые поля, где SUM (column2) = 0, в то время как я не хочу видеть всю строку.

Может ли кто-нибудь мне помочь?

Спасибо

ответ

1

Вам просто нужно поставить условие WHERE в HAVING пункта.

SELECT column1, sum (column2) 
FROM table1 
GROUP BY column1 
HAVING sum (column2) <> 0 

Предложение HAVING получает оценку после того, как GROUP BY был применен.

+0

Правильно! Это было легко! как я уже сказал, я новичок в sql ... большое спасибо! – user2211236

0

Используйте HAVING условие:

SELECT column1, sum (column2) 
FROM table1 
GROUP BY column1 
HAVING sum (column2) <> 0 

Оракул PL/SQL HAVING предложение используется для фильтрации или ограничить группы, образованные с помощью пункта GROUP_BY.

Source

+0

это легко ?! большое спасибо! как я уже сказал, я новичок в sql и не знаю о наличии предложения. – user2211236

Смежные вопросы