使用具有聚合函数的案例&按条款分组

时间:2013-01-29 10:55:40

标签: sql group-by case aggregate-functions

我有一个使用带有聚合函数和分组子句的CASE的查询,比如这个

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子句可能不包含聚合”

然后,我改变我的脚本(从分组中排除)

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

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

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

2 个答案:

答案 0 :(得分:14)

试试这个:

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陈述毫无意义。如果<COLUMN_NAME_A>NULL<COLUMN_NAME_B> * <COLUMN_NAME_A>NULL,则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

{{1}}用于未检索到非空值的情况。

答案 1 :(得分:0)

也许试试这个

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>