我有一个查询:
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组相同,但是由于月份不一致,因此必须是另一个组。
我希望问题已经解决,你们可以帮助我。
预先感谢
答案 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;
这会将分组构造为数字而不是字母。