Sql server 标识每个ID存在2个列值:SQL
下面是我的示例数据Sql server 标识每个ID存在2个列值:SQL,sql-server,sql-server-2008,ssms,Sql Server,Sql Server 2008,Ssms,下面是我的示例数据 ID desc date ------------------------------ 1 started 10-01-2020 1 restarted 10-01-2020 1 closed 10-01-2020 1 clear 10-01-2020 2 started 11-02-2020 2 closed 12-01-20
ID desc date
------------------------------
1 started 10-01-2020
1 restarted 10-01-2020
1 closed 10-01-2020
1 clear 10-01-2020
2 started 11-02-2020
2 closed 12-01-2020
2 cleared 12-01-2020
3 started 12-01-2020
3 restarted 12-01-2020
3 restarted 12-01-2020
3 clear 12-01-2020
现在,我的预期输出是获取至少在desc列中启动和重新启动了多少个不同ID的计数
预期产出:
month distinctIDcount count_started count_restarted
Jan 2020 2 2 3
以下是我目前掌握的情况:
我能够找到那些已经启动的和那些已经分别重新启动的,但我只需要找到它们都存在的地方
select
Format(date, 'MMMM-yyyy') as Month,
sum(count_started) as count_started,
sum(count_restarted) as count_restarted
from
(select
date,
case when description = 'started' then 1 else 0 end as count_started,
case when description = 'restarted' then 1 else 0 end as count_restarted,
from
(select *
from #temp2
where date > '2020-01-01 00:00:00') a
) b
group by
Format(date, 'MMMM-yyyy')
我们可以先尝试按ID和月份进行聚合,然后再单独按月份进行第二次聚合: 以cte为例 选择ID、FORMATdate、“MMMM yyyy”作为月份, COUNTCASE当desc='started'时,则1结束为count_started, COUNTCASE当desc='restarted'时,1结束为count\u restarted, COUNTCASE WHEN COUNTCASE WHEN desc='started'然后1 END>0和 COUNTCASE当desc='重新启动'时,则1结束>0 然后1或0作为计数结束 从你的桌子上 按ID、格式日期“MMMM yyyy”分组 选择 月 将两个计数都作为区分计数, SUMcount_启动时计数_启动, 当count_重新启动时,SUMcount_重新启动 来自cte 分组 月
不,DifferenticCount实际上只是在同一ID desc中启动和重新启动的计数。您提供的将为我提供所有不同的值。@Spisher我想我已经修复了我的答案。您做到了:这是我所期望的!!多谢各位: