1

您好,我是 pl sql 的新手,正在尝试进行如下查询:

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

基本上我想做的是只选择那些按column1分组的sum(column2)为<> 0的行。

这个查询给了我一个 ORA-00934 错误,这是有道理的,因为在 WHERE 子句中没有指定求和操作必须按 column1 分组(或者至少我认为这是问题所在)。

我尝试了不同的解决方案,例如:

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

但 pl-sql 不喜欢它。

什么是有效的:

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

但在这种情况下,我并没有我想要的,因为结果是一个伪表,就像 SELECT column1, SUM(column2)... 中的那个一样,除了我看到 SUM(column2) = 0 的白色字段虽然我不想看到整行。

有谁能够帮助我?

谢谢你

4

2 回答 2

1

您只需要将您的WHERE子句放入HAVING子句中。

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

HAVING子句在应用后得到评估GROUP BY

于 2013-04-04T09:55:08.317 回答
0

使用 HAVING 子句:

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

Oracle PL/SQL HAVING 子句用于过滤或限制由 GROUP_BY 子句形成的组。

来源

于 2013-04-04T09:55:38.833 回答