SQL 服务器每组添加行号

SQL Server Add row number each group

我正在查询 SQL Server 2016。我按 serial_no 排序并按 [=21= 分组] 并且我想在下面的相同示例中添加行号

row_no | pay_type | serial_no
   1   |    A     | 4000118445
   2   |    A     | 4000118458
   3   |    A     | 4000118461
   4   |    A     | 4000118473
   5   |    A     | 4000118486
   1   |    B     | 4000118499
   2   |    B     | 4000118506
   3   |    B     | 4000118519
   4   |    B     | 4000118521
   1   |    A     | 4000118534
   2   |    A     | 4000118547
   3   |    A     | 4000118550
   1   |    B     | 4000118562
   2   |    B     | 4000118565
   3   |    B     | 4000118570
   4   |    B     | 4000118572

请帮帮我..

您可以将组分配给相同的相邻薪酬类型,然后使用 row_number()。为此,行号的差异是确定组的好方法:

select row_number() over (partition by pay_type, seqnum - seqnum_2 order by serial_no) as row_no,
       t.*
from (select t.*,
             row_number() over (order by serial_no) as seqnum,
             row_number() over (partition by pay_type order by serial_no) as seqnum_2
      from t
     ) t;

此类问题是 gaps-and-islands 问题的一个示例。为什么行号的差异有效?我发现最简单的理解方式就是看子查询的结果。

Here 是一个 db<>fiddle.

SELECT
    ROW_NUMBER() OVER(PARTITION BY paytype ORDER BY serial_no) as row_no,
    paytype, serial_no
FROM table
ORDER BY serial_no

将此添加到您的 select 列表

 ROW_NUMBER() OVER ( ORDER BY (SELECT 1) ) 

因为你已经按你的东西排序了,所以你不需要在你的窗口函数中排序所以消耗更少 CPU,