我有一张带有table_id行和另外2行的表。我想要使用row_number函数进行编号的类型,并且希望结果看起来像这样:
id |col1 |col2 |what I want
------------------------------
1 |x |a |1
2 |x |b |2
3 |x |a |3
4 |x |a |3
5 |x |c |4
6 |x |c |4
7 |x |c |4
请考虑一下;
partition by col1
”是可以的。除此之外; order by col2
不好)。每当col2更改时,我希望该数字比上一行增加一个。
row_number () over (partition by col1 order by col2)
不起作用。因为我要按ID排序。
答案 0 :(得分:2)
使用LAG
和显示窗口的COUNT
可以帮助您获得所需的条件:
WITH Previous AS(
SELECT V.id,
V.col1,
V.col2,
V.[What I want],
LAG(V.Col2,1,V.Col2) OVER (ORDER BY ID ASC) AS PrevCol2
FROM (VALUES(1,'x','a',1),
(2,'x','b',2),
(3,'x','a',3),
(4,'x','a',3),
(5,'x','c',4),
(6,'x','c',4),
(7,'x','c',4))V(id, col1, col2, [What I want]))
SELECT P.id,
P.col1,
P.col2,
P.[What I want],
COUNT(CASE P.Col2 WHEN P.PrevCol2 THEN NULL ELSE 1 END) OVER (ORDER BY P.ID ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) +1 AS [What you get]
FROM Previous P;