在sql中,如何对连续列进行计数,并且每个列在行之前进行计数
我正在为我的应用程序使用在sql中,如何对连续列进行计数,并且每个列在行之前进行计数,sql,sql-server,count,numbers,sequence,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| +------+------+ 我认为结果集如下 前 我无法使用游标执行查询。这是最坏的情况选项。您需
MSSQL
,我需要计算序列号状态行
桌子是这样的,
+------+------+
|Number|Status|
| 1| N|
| 2| G|
| 3| G|
| 4| N|
| 5| N|
| 6| G|
| 7| G|
| 8| N|
+------+------+
我认为结果集如下
前
我无法使用游标执行查询。这是最坏的情况选项。您需要识别连续的“N”和“G”值组。我喜欢用行号的不同来处理这个问题。然后,您可以使用
行\编号()
枚举行:
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;
计数的逻辑是什么?请提供更多细节以了解您的问题“8”为什么会改变其值?你在使用什么数据库?
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;