如何用SQL 提取ID某时间段内是否出现的信息



  • 问题描述:
    表原始数据始有三列,ID,Begain date,End date(黄色区域)。 表示某ID在20197月至2020年6月一年间某医疗服务的开始日和终止日,所以ID是有重复的,代表不同的医疗服务开始日期和终止日期。

    想转换成新的格式(绿色区域),ID列和 日期列(2019年7月至2020年6月),如果ID在某月有医疗服务,就显示1,没有就显示0,这样我就可以知道在某个月是否这个ID有服务,而且我也可以计算某个月有多少ID用了服务。

    e0c20a84-9374-4757-886b-397140774896-image.png

    代码实现

    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
    

登录后回复