如何计算顺序列,并在sql中的行之前计算每一列

时间:2015-02-13 20:16:29

标签: sql sql-server count numbers sequence

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

表就是这样,

+------+------+
|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   |
+------+------+-----+

我无法使用游标来提高查询性能。这是最糟糕的选择....

1 个答案:

答案 0 :(得分:2)

您需要识别连续的" 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;