Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在sql中,如何对连续列进行计数,并且每个列在行之前进行计数_Sql_Sql Server_Count_Numbers_Sequence - Fatal编程技术网

在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;