如何用SQL 提取ID某时间段内是否出现的信息
-
问题描述:
表原始数据始有三列,ID,Begain date,End date(黄色区域)。 表示某ID在20197月至2020年6月一年间某医疗服务的开始日和终止日,所以ID是有重复的,代表不同的医疗服务开始日期和终止日期。想转换成新的格式(绿色区域),ID列和 日期列(2019年7月至2020年6月),如果ID在某月有医疗服务,就显示1,没有就显示0,这样我就可以知道在某个月是否这个ID有服务,而且我也可以计算某个月有多少ID用了服务。
代码实现
Create table #Temp ( ID varchar, Begin_date date, End_date date ) INSERT INTO #Temp (ID, Begin_date, End_date) VALUES (1,'2018/10/3','2019/1/3'); INSERT INTO #Temp (ID, Begin_date, End_date) VALUES (1,'2018/10/3','2019/1/3'); INSERT INTO #Temp (ID, Begin_date, End_date) VALUES (2,'2019/10/3','2020/1/3'); SELECT [ID], IIF(SUM(IIF(YEAR(Begin_date)*100+MONTH(Begin_date) <= 201811,1,0)*IIF(YEAR(End_date)*100+MONTH(End_date) >= 201811,1,0))>0,1,0) AS [2018 11], IIF(SUM(IIF(YEAR(Begin_date)*100+MONTH(Begin_date) <= 201911,1,0)*IIF(YEAR(End_date)*100+MONTH(End_date) >= 201911,1,0))>0,1,0) AS [2019 11] FROM #Temp GROUP BY ID