如何计算顺序列并且每个列都在 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;
我正在为我的应用程序使用 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;