繁体   English   中英

按几列分组,并在另一列SQL Server上计数

[英]Group by several columns with count on another column SQL Server

我正在使用SQL SERVER 2012,并且在处理此SQL语句。 基本上我有这张桌子

我想按日期和用户名分组,对状态列进行计数,如下所示:

查询结果

我该如何实现?

您可以将联合查询与一些条件SUM一起使用。

SELECT 
    LastUpdate,
    UpdatedBy as User, 
    SUM(CASE WHEN Status = 'A' THEN 1 ELSE 0 END) as A
    SUM(CASE WHEN Status = 'C' THEN 1 ELSE 0 END) as C
    SUM(CASE WHEN Status = 'D' THEN 1 ELSE 0 END) as D
    SUM(CASE WHEN Status = 'Z' THEN 1 ELSE 0 END) as Z
    SUM(CASE WHEN Status = 'X' THEN 1 ELSE 0 END) as X
FROM table
GROUP BY LastUpdate, UpdatedBy
ORDER BY LastUpdate, UpdatedBy

您可以尝试使用条件聚合

select LastUpdate,UpdatedBy, 
count(case when Status='A' then UpdatedBy end) as 'A',
count(case when Status='C' then UpdatedBy end) as 'C',
count(case when Status='D' then UpdatedBy end) as 'D',
count(case when Status='Z' then UpdatedBy end) as 'Z',
count(case when Status='X' then UpdatedBy end) as 'X'
from tablename
group by LastUpdate,UpdatedBy

好吧,我在伙计们的帮助下弄清楚了

    SELECT 
    CAST(LastUpdate as DATE),
    UserName,
    SUM(CASE WHEN Status = 1 THEN 1 ELSE 0 END) as [Status_1],
    SUM(CASE WHEN Status = 2 THEN 1 ELSE 0 END) as [Status_2],
    SUM(CASE WHEN Status = 3 THEN 1 ELSE 0 END) as [Status_3]
FROM Table
WHERE LastUpdate BETWEEN '2018-11-30 10:013:44.080' AND '2018-12-30 10:013:44.080'
    GROUP BY CAST(LastUpdate as DATE), UserName
    ORDER BY CAST(LastUpdate as DATE)

这是一个示例查询,我在其中查找两个日期之间的记录。 我遇到的问题部分是由于过滤了datetime而不是date。 lastupdate列是日期时间,因此通过强制转换为最新日期可以解决该问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM