我在Oracle遇到问题。 我有一个SQL修正了一些值。现在我开始用参数表中的值替换它们。其中一些固定值在NVL()中。
简单地说我的陈述是这样的。
SELECT NVL(MAX(t.datefield), to_date('01011900','DDMMYYYY'))
FROM table t;
工作正常。
现在我想用一个subselect将我的参数表中的固定日期替换为日期,这根本不起作用。
// Works
SELECT NVL(MAX(NULL), 'hello') FROM DUAL;
// Doesn't work
SELECT NVL(MAX(NULL), (SELECT 'hello' FROM DUAL)) FROM DUAL;
错误是:
ORA-00937: .... "not a single-group group function"
我不知道如何按子选择进行分组。
非常感谢任何帮助!谢谢!
答案 0 :(得分:1)
您无法通过子选择进行分组。但是,为了实现这一点,您的子选择只能返回一行。因此,将其更改为笛卡尔连接和组合。
SELECT NVL(MAX(NULL), str)
FROM DUAL
CROSS JOIN ( SELECT 'hello' as str FROM DUAL )
GROUP BY STR
更常见的是,未包含在聚合函数中的每个列必须包含在GROUP BY中。加NVL()
is bad;请改用COALESCE()
或CASE
。