带有 group by 子句的多个聚合函数

use*_*674 5 sql group-by count

我有以下

WorkflowID  FK_UA                DateApprobation
----------- -------------------- -----------------------
1           3                    NULL
2           1                    NULL
3           1                    NULL
4           2                    2013-05-31 09:22:33.000
Run Code Online (Sandbox Code Playgroud)

我想要做的是获得一堆聚合字段。

我想获得批准的工作流、非批准的工作流、所有工作流

我知道的方式是“DateApprobation”字段是否为空或具有值。

问题是,我希望能够通过“FK_UA”对其进行分组,所以我不知道如何使用 group by 子句来拥有 3 个聚合函数 (COUNT)。

我正在寻找可以实现这一点的查询,我尝试了几个类似的案例,但它返回了一些奇怪的值。

我试过这个:

SELECT
    FK_UA
,COUNT(WorkflowID) AS TOTAL
,COUNT(CASE when DateApprobation is not null then 1 else 0 end) AS APPROVED
,COUNT(CASE when DateApprobation is null then 1 else 0 end) AS NOT_APPROVED   
FROM Workflow        
GROUP BY
FK_UA
Run Code Online (Sandbox Code Playgroud)

但它总是为所有 3 个值返回相同的东西!

Art*_*dod 3

SELECT
    SUM(CASE WHEN [DateApprobation] IS NOT NULL THEN 1 ELSE 0 END) as [Approbated count],
    SUM(CASE WHEN [DateApprobation] IS NULL THEN 1 ELSE 0 END) as [Non-Approbated count],
    COUNT(*) as [Total]
FROM YourTable
GROUP BY FK_UA 
Run Code Online (Sandbox Code Playgroud)

如果我没猜错的话......