0

我在 Oracle 中遇到了问题。我有一个 SQL,其中一些值是固定的。现在我开始用参数表中的值替换它们。其中一些固定值位于 NVL() 中。

简单地说我的说法是这样的。

SELECT NVL(MAX(t.datefield), to_date('01011900','DDMMYYYY'))
FROM table t;

这很好用。

现在我想用子选择将固定日期替换为参数表中的日期,这根本不起作用。

// 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"

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

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

4

1 回答 1

1

您不能按子选择分组。但是,为了实现这一点,您的子选择只能返回一行。因此,将其更改为笛卡尔连接并按此分组。

SELECT NVL(MAX(NULL), str) 
  FROM DUAL
 CROSS JOIN ( SELECT 'hello' as str FROM DUAL )
 GROUP BY STR

更一般地,未包含在聚合函数中的每一列都必须包含在 GROUP BY 中。加NVL()是坏的;使用COALESCE()orCASE代替。

于 2014-09-08T09:44:39.537 回答