Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NVL中的Oracle子选择(需要分组)_Oracle_Group By_Subquery_Nvl_Ora 00937 - Fatal编程技术网

NVL中的Oracle子选择(需要分组)

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;

我在甲骨文公司面临一个问题。 我有一个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"
我不知道如何分组


非常感谢您的帮助!谢谢

您不能按子选择分组。但是,为了实现这一点,您的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问题,您完全正确,我只是在使用给定的代码。