4

我有一个使用 CASE 和聚合函数和 group by 子句的查询,像这样

SELECT
A
,B
,C
,CASE
     WHEN <COLUMN_NAME_A> IS NOT NULL 
     THEN (SUM(<COLUMN_NAME_B>) * <COLUMN_NAME_A>)
          ELSE 0
END AS <ALIAS>
FROM <TARGET_TABLE>
GROUP BY
A
,B
,C
,<ALIAS>

我收到一个错误“GROUP BY 和 WITH...BY 子句可能不包含聚合”

然后,我更改了我的脚本(从 group by 中排除)

SELECT
A
,B
,C
,CASE
     WHEN <COLUMN_NAME_A> IS NOT NULL 
     THEN (SUM(<COLUMN_NAME_B>) * <COLUMN_NAME_A>)
          ELSE 0
END AS <ALIAS>
FROM <TARGET_TABLE>
GROUP BY
A
,B
,C

并且仍然出现错误“选定的非聚合值必须是关联组的一部分”

请帮助我理解为什么必须成为 group by 的一部分,我该怎么做才能解决它?

4

2 回答 2

19

试试这个:

SELECT
A
,B
,C
,SUM(CASE
     WHEN <COLUMN_NAME_A> IS NOT NULL 
     THEN <COLUMN_NAME_B> * <COLUMN_NAME_A>
          ELSE 0
END) AS <ALIAS>
FROM <TARGET_TABLE>
GROUP BY
A
,B
,C

但是您的 CASE 陈述毫无意义。If <COLUMN_NAME_A>is NULLie <COLUMN_NAME_B> * <COLUMN_NAME_A>is NULLit 将被SUM聚合忽略。改用这个。

SELECT
A
,B
,C
,ISNULL(SUM(<COLUMN_NAME_B> * <COLUMN_NAME_A>), 0) AS <ALIAS>
FROM <TARGET_TABLE>
GROUP BY
A
,B
,C

ISNULL用于没有检索到非空值的情况。

于 2013-01-29T10:58:07.200 回答
0

也许试试这个

SELECT  A
,B
,C
,CASE
     WHEN <COLUMN_NAME_A> IS NOT NULL 
     THEN (SUM(<COLUMN_NAME_B>) * <COLUMN_NAME_A>)
          ELSE 0
END AS <ALIAS>
FROM <TARGET_TABLE>
GROUP BY
A
,B
,C
,<COLUMN_NAME_A>
于 2019-05-31T14:25:36.543 回答