SQL Server组

时间:2018-11-01 11:40:43

标签: sql sql-server

我有一个查询:

select maand, KENMART, minprio, _Id, rij 
from Tabelx

具有以下输出:

maand   KENMART     minprio _Id     Rij
----------------------------------------
201701  15959074    29      2921957 1   
201702  15959074    29      2921957 2  
201703  15959074    29      2921957 3  
201704  15959074    29      2921957 4  
201705  15959074    29      2921957 5  
201706  15959074    29      2921957 6  
201707  15959074    29      2921955 1  
201708  15959074    29      2921955 2  
201709  15959074    19      2921949 1  
201710  15959074    19      2921949 2  
201711  15959074    19      2921949 3   
201712  15959074    29      2921953 1  
201801  15959074    29      2921951 1  
201802  15959074    19      2921947 1  
201803  15959074    19      2921947 2  
201804  15959074    29      2921951 2  
201805  15959074    29      2921951 3  
201806  15959074    29      2921951 4  
201807  15959074    29      2921951 5  
201808  15959074    29      2921951 6  
201809  15959074    29      2921951 7  

我想进行分组,这样我的输出看起来像这样

maand   KENMART     minprio _Id     Rij Group     
-----------------------------------------------
201701  15959074    29      2921957 1   A   
201702  15959074    29      2921957 2   A    
201703  15959074    29      2921957 3   A    
201704  15959074    29      2921957 4   A    
201705  15959074    29      2921957 5   A    
201706  15959074    29      2921957 6   A    
201707  15959074    29      2921955 1   B   
201708  15959074    29      2921955 2   B    
201709  15959074    19      2921949 1   C    
201710  15959074    19      2921949 2   C    
201711  15959074    19      2921949 3   C   
201712  15959074    29      2921953 1   D    
201801  15959074    29      2921951 1   E    
201802  15959074    19      2921947 1   F     
201803  15959074    19      2921947 2   F    
201804  15959074    29      2921951 2   G   
201805  15959074    29      2921951 3   G    
201806  15959074    29      2921951 4   G    
201807  15959074    29      2921951 5   G    
201808  15959074    29      2921951 6   G    
201809  15959074    29      2921951 7   G    

问题出在这组

201801 15959074 29 2921951 1 E

它的ID与G组相同,但是由于月份不一致,因此必须是另一个组。

我希望问题已经解决,你们可以帮助我。

预先感谢

2 个答案:

答案 0 :(得分:1)

这是代码,它的工作正常。我已经使用数字语句进行测试,例如A是'1'B是'2',依此类推。

select *,(
(case
 when KENMART = 15959074 and id=2921957 then 1 
 when KENMART = 15959074 and id=2921955 then 2
 when KENMART = 15959074 and id=2921949 then 3
 when KENMART = 15959074 and id=2921953 then 4
 when KENMART = 15959074 and id=2921947 then 5
 when KENMART = 15959074 and id=2921951 then 6

end) ) as [Group]
 from tabelx

答案 1 :(得分:0)

我很确定这是一个孤岛问题。一种方法使用lag()和累积和:

select t.*,
       sum(case when _id = prev_id then 0 else 1 end) over (partition by kenmart order by maand) as grp
from (select t.*,
             lag(_id) over (partition by kenmart order by maand) as prev_id
      from tabelx t
     ) t;

这会将分组构造为数字而不是字母。