我编写了一个SQL SELECT来总结临时表的内容。 MCVE是:
WITH cte
AS
(
SELECT Change FROM (VALUES('INSERT'), ('INSERT'), ('INSERT'), ('INSERT'), ('UPDATE'), ('UPDATE'), ('UPDATE'), ('DELETE'), ('DELETE')) AS A(CHANGE)
)
SELECT ' I=' + CAST(SUM(IIF(Change = 'INSERT', 1, 0)) AS VARCHAR(10)) +
' U=' + CAST(SUM(IIF(Change = 'UPDATE', 1, 0)) AS VARCHAR(10)) +
' D=' + CAST(SUM(IIF(Change = 'DELETE', 1, 0)) AS VARCHAR(10))
FROM cte;
(在原始代码中,我读的表有更多的列而不仅仅是Change(它实际上是来自MERGE语句的OUTPUT,而我记录了MERGE所做的)但我只是参考SELECT中的一列,如上所述。)
这适用于我的期望:I=4 U=3 D=2
但是我在代码审查中意识到我省略了GROUP BY Change
语句。
所以我想知道上面的代码是如何工作的?
答案 0 :(得分:0)
从语法的角度来看,只要有一个或多个未包含在聚合函数中的列(SUM,AVG,COUNT,MIN,MAX),就只需要使用Group By
在您的示例中,您将选择当前包含在Change
聚合函数中的SUM
列,因此您无需使用Group By
。
但是,如果您要选择Change
和X
列,因为只有Change
包含在聚合函数中,您需要添加Group By X
。这意味着您将为Change
的每个组X
进行汇总。