如何计算顺序列并且每个列都在 sql 中的行之前计算

how to count sequential column and each one is counted before rows in sql

我正在为我的应用程序使用 MSSQL,我需要计算序号状态前导行。

Table是这样的,

+------+------+
|Number|Status|
|     1|     N|
|     2|     G|
|     3|     G|
|     4|     N|
|     5|     N|
|     6|     G|
|     7|     G|
|     8|     N|
+------+------+

我想结果集如下 前任。

+------+------+-----+
|Number|Status|Count|
|     1|     N| 1   |
|     2|     G| 1   |
|     3|     G| 2   |
|     4|     N| 1   |
|     5|     N| 2   |
|     6|     G| 1   |   
|     7|     G| 2   |   
|     8|     G| 3   |
+------+------+-----+

我无法使用游标来执行查询。这是最坏的选择....

您需要识别连续的 "N" 和 "G" 值组。我喜欢用不同的行号来解决这个问题。然后你可以使用 row_number() 来枚举行:

select t.number, t.status,
       row_number() over (partition by status, grp order by number) as seqnum
from (select t.*,
             (row_number() over (order by number) -
              row_number() over (partition by status order by number
             ) as grp
      from table t
     ) t;