NVL中的Oracle Subselect(按要求分组)

时间:2014-09-08 09:36:54

标签: oracle group-by subquery nvl ora-00937

我在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"

我不知道如何按子选择进行分组。

非常感谢任何帮助!谢谢!

1 个答案:

答案 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