联接计数表

斯拉帕坦

我有这样一张桌子:

ID CAT1 CAT2 CAT3日期
 1 IT网络cisco1 2015-11-26 
 2 IT网络cisco2 2015-11-26 
 1 IT网络cisco1 2015-11-27 
 2 IT网络cisco2 2015-11-27 
 3 OT VID dist1 2015-11-26 
 4 OT VID dist2 2015-11-26 
 3 OT VID dist1 2015-11-27 
 4 OT VID dist2 2015-11-27 
 5 ET ALT flip1 2015-11-26 
 6 ET ALT flip2 2015-11-26 
 5 ET ALT flip1 2015 -11-27 
 6 ET ALT flip2 2015-11-27 
ecc ..

我需要这样的计数输出:

CAT1 CAT2 CAT3 COUNT(2015-11-26)COUNT(2015-11-27)
 IT网络cisco1 1 1 
 IT网络cisco2 1 1 
 OT VID dist1 1 1 
 OT VID dist1 1 1 
 ET ALT翻转1 1 1 
 ET ALT翻转1 1 1

如您所见,它们是用不同的日期复制的。但同一时间,日期为2015-11-27的行与2015-11-26不在同一行,在这种情况下,计数应输出0或null。您能帮我做一个查询吗?我正在使用SQL Server 2008。

贾尔

做一个GROUP BY使用CASE表达式进行条件计数:

select CAT1, CAT2, CAT3,
       count(case when DATE = '2015-11-26' then 1 end) as cnt_2015-11-26,
       count(case when DATE = '2015-11-27' then 1 end) as cnt_2015-11-27
from tablename
group by CAT1, CAT2, CAT3

编辑

还要使用派生表计算cnt_2015-11-26和cnt_2015-11-27之间的差异:

select CAT1, CAT2, CAT3, cnt_2015-11-26, cnt_2015-11-27,
       cnt_2015-11-26 - cnt_2015-11-27 as difference
from
(
select CAT1, CAT2, CAT3,
       count(case when DATE = '2015-11-26' then 1 end) as cnt_2015-11-26,
       count(case when DATE = '2015-11-27' then 1 end) as cnt_2015-11-27
from tablename
group by CAT1, CAT2, CAT3
) dt

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章