Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 标识每个ID存在2个列值:SQL_Sql Server_Sql Server 2008_Ssms - Fatal编程技术网

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我想我已经修复了我的答案。您做到了:这是我所期望的!!多谢各位: