【发布时间】:2014-09-19 11:20:47
【问题描述】:
我试图寻找线索,但在任何地方都没有得到满意的答案。
我的问题是我有一个巨大的 select 语句,其中几乎一半的列来自子查询,在这些子查询中我必须检查很多东西。
我知道 oracle 在聚合函数方面是严格的,但是当我在其中一个子查询中尝试这样的事情时,我得到了预期的输出:
SELECT DECODE(NVL(SUM(Qty1),0),0,SUM(Qty2),SUM(Qty1))
FROM test_v
WHERE item_no = 1234567;
但奇怪的是,当我将其修改为:
SELECT
DECODE(FLAG,1,SUM(Qty2),SUM(Qty1))
FROM test_v
WHERE item_no = 1234567;
我收到此错误:
ORA-00937: not a single-group group function
00937. 00000 - "not a single-group group function"
*Cause:
*Action:
Error at Line: 9 Column: 8`
为什么它在两个几乎相似的查询中给出不同的结果。我知道它可以通过使用GROUP BY 来解决,但是当我在输出中没有得到任何其他列时,我该如何决定GROUP BY 子句。
我还继续尝试使用这样的CASE 声明,但没有用:
SELECT
CASE
WHEN flag = 1 THEN
SUM(Qty2)
WHEN flag = 0 THEN
SUM(Qty1)
END Qty
FROM test_v
WHERE item_no = 1234567;
我仍然遇到同样的错误。
我知道我可以通过使用另一个子查询来计算 SUM 来覆盖这一点,但这就像生活在一个 select 中的几代子查询一样,出于审美、性能和个人原因,我不希望过度使用子查询。
任何想法为什么第一个有效而这无效??
【问题讨论】: