首页 > 解决方案 > SQL查询中的老化桶

问题描述

我有一个表,其中包含成员 ID 以及 LM_Conversion_date 和退休日期。我已经设法得到两个日期之间的差异,但现在我想拥有老化的桶并反映那些属于这些桶的会员编号。这是我的表格示例以及我希望如何查看数据,

Member_no   LM_Conversion_date  Retired_date    Date_difference
100026            08/12/2017    31/12/2017      23
100114            31/08/2017    31/08/2017      0
100620            15/09/2017    30/09/2017      15
100726             10/01/2017   31/12/2016     -10

我希望输出是

All negative      0-15      15-30     >30
100726            100114    100026   
                  100620        

任何帮助都感激不尽

标签: sqltsql

解决方案


您可以使用条件聚合来做到这一点:

select max(case when grp = '<0' then member_no end) as all_negative,
       max(case when grp = '<=15' then member_no end) as [0-15],
       max(case when grp = '<=30' then member_no end) as [15-30],
       max(case when grp = '>30' then member_no end) as [>30]      
from (select t.*, v.grp,
             row_number() over (partition by grp order by member_no) as seqnum
      from t cross apply
           (values (case when date_difference <= 0 then '<0'
                         when date_difference <= 15 then '<=15'
                         when date_difference <= 30 then '<=30'
                         else '>30'
                    end)
           ) v(grp)
      ) t
group by seqnum
order by seqnum;

子查询基本上枚举了每个组中的成员。这些被聚合聚合成单独的行。


推荐阅读