gpt4 book ai didi

tsql - 我需要一种我无法在 T-SQL 上用 ROW_NUMBER 弄清楚的组排序类型

转载 作者:行者123 更新时间:2023-12-02 00:49:42 34 4
gpt4 key购买 nike

我有一个包含 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

请考虑;

  • 只有一个 x,所以“partition by col1”是可以的。除此之外;
  • 有两个a的序列,分别计算
  • (不是 1,2,1,1,3,3,3)。并且排序必须按 id,而不是 col2(所以order by col2 不正确)。

我希望这个数字在 col2 与上一行相比发生变化时增加一个。

row_number () over (partition by col1 order by col2) 不起作用。因为我想按 id 排序。

最佳答案

使用 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;

DB<>Fiddle

关于tsql - 我需要一种我无法在 T-SQL 上用 ROW_NUMBER 弄清楚的组排序类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58765347/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com