我有一个问题:
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它与组G具有相同的ID,但必须是不同的组,因为月份不对齐。
我希望问题清楚了,你们能帮我解决这个问题。
提前感谢
发布于 2018-11-02 18:58:26
下面是代码和它的工作情况,我已经使用了数字语句来测试,例如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发布于 2018-11-01 19:46:14
我很确定这是一个鸿沟和岛屿的问题。一种方法使用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;这会将分组构建为数字,而不是字母。
https://stackoverflow.com/questions/53100578
复制相似问题