NVL中的Oracle子选择(需要分组)
我在甲骨文公司面临一个问题。 我有一个SQL,其中一些值是固定的。现在我开始用参数表中的值替换它们。其中一些固定值位于NVL()中 简单地说,我的声明是这样的NVL中的Oracle子选择(需要分组),oracle,group-by,subquery,nvl,ora-00937,Oracle,Group By,Subquery,Nvl,Ora 00937,我在甲骨文公司面临一个问题。 我有一个SQL,其中一些值是固定的。现在我开始用参数表中的值替换它们。其中一些固定值位于NVL()中 简单地说,我的声明是这样的 SELECT NVL(MAX(t.datefield), to_date('01011900','DDMMYYYY')) FROM table t; 那很好 现在我想用subselect将参数表中的固定日期替换为一个日期,这根本不起作用 // Works SELECT NVL(MAX(NULL), 'hello') FROM DUAL;
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"
我不知道如何分组
非常感谢您的帮助!谢谢 您不能按子选择分组。但是,为了实现这一点,您的sub-select只能返回一行。所以,把它变成笛卡尔连接,然后按它分组
SELECT NVL(MAX(NULL), str)
FROM DUAL
CROSS JOIN ( SELECT 'hello' as str FROM DUAL )
GROUP BY STR
更一般地说,未包含在聚合函数中的每一列都必须包含在GROUP BY中。加;改用
COALESCE()
或CASE
。太好了-非常感谢!我不知道为什么我不这么想。对于Nvl/Coalesce问题,您完全正确,我只是在使用给定的代码。