考虑到由列ID和代码组成的原始数据集,我试图实现以下“级别”结果。
id code rank
1 A 1
2 A 1
3 A 1
4 B 2
5 B 2
6 C 3
7 C 3
8 C 3
9 A 4
10 A 4使用代码列上的RANK_DENSE指令,我得到以下结果(在行之间的“中断”之后,A代码也获得相同的秩值)
id code rank
1 A 1
2 A 1
3 A 1
4 B 2
5 B 2
6 C 3
7 C 3
8 C 3
9 A 1
10 A 1是否有可能实现第一个(示例)表中所示的结果,当由id: 1-2-3组成的组与由id: 9-10组成的组之间不使用游标时,A代码更改等级?
谢谢
发布于 2015-01-30 11:13:38
你想要找到一系列的值,并给他们一个等级。您可以使用行号的不同方法来完成这一任务。以下为每个分组分配不同的编号:
select o.*, dense_rank() over (order by grp, code)
from (select o.*,
(row_number() over (order by id) -
row_number() over (partition by code order by id)
) as grp
from original o
) o;如果希望分配与原始数据相同的顺序,则可以通过id进行排序,但这需要一个额外的窗口函数:
select o.*, dense_rank() over (order by minid) as therank
from (select o.*, min(id) over (partition by grp, code) as minid
from (select o.*,
(row_number() over (order by id) -
row_number() over (partition by code order by id)
) as grp
from original o
) o
) o;发布于 2015-01-30 11:21:19
如果当前与前一行相同,则之和。工作于Server 2012。
WITH CTE AS (
SELECT id, code,
CASE Code WHEN LAG(CODE) OVER (ORDER BY id) THEN 0 ELSE 1 END AS Diff
FROM Table1)
SELECT id, code, SUM(Diff) OVER (ORDER BY id) FROM CTE在How to make row numbering with ordering, partitioning and grouping也可以看到类似的问题
https://stackoverflow.com/questions/28234450
复制相似问题