我有这样一张桌子:
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] 删除。
我来说两句