我有一个使用带有聚合函数和分组子句的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
仍然出现错误“选定的非聚合值必须是关联组的一部分”
请帮助我理解为什么必须成为小组的一部分, 我该怎么做才能解决它?
答案 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>