SQL按顺序计算一个数

SQL按顺序计算一个数,sql,sql-server,tsql,sql-server-2012,gaps-and-islands,Sql,Sql Server,Tsql,Sql Server 2012,Gaps And Islands,我有下表,你可以看到ID不一样。所以我不能分组。我需要数一数所有按顺序排列的。比如从身份证9号到13号,从身份证20号到23号。我怎么做 这里有一个解决方案,它是滞后和领先 ;WITH StackValues AS ( SELECT T.*, PreviousStatus = LAG(T.Status, 1, 0) OVER (ORDER BY T.ID ASC), NextStatus = LEAD(T.Status, 1, 0) OVE

我有下表,你可以看到ID不一样。所以我不能分组。我需要数一数所有按顺序排列的。比如从身份证9号到13号,从身份证20号到23号。我怎么做


这里有一个解决方案,它是
滞后
领先

;WITH StackValues AS
(
    SELECT
        T.*,
        PreviousStatus = LAG(T.Status, 1, 0) OVER (ORDER BY T.ID ASC),
        NextStatus = LEAD(T.Status, 1, 0) OVER (ORDER BY T.ID ASC)
    FROM
        #YourTable AS T
),
ValuesToSum AS
(
    SELECT
        L.*,
        ValueToSum = CASE 
            WHEN L.Status = 1 AND L.PreviousStatus = 1 AND L.NextStatus = 0 THEN 1
            ELSE 0 END
    FROM
        StackValues AS L
)
SELECT
    Total = SUM(V.ValueToSum)
FROM
    ValuesToSum AS V

LAG
将为您提供
N
上一行(
N=1
,对于本例),而
LEAD
将为您提供
N
下一行(
N=1
)。查询将根据上一个和下一个值生成另一列(
ValueToSum
),并使用其结果进行求和。

请阅读接受的答案SQL server 2012您尚未指定您的预期输出。能否提及您的预期输出。您接受的解决方案似乎没有给出正确的结果。代码没有给出预期的输出,只是给出了一个数字。好的,这是计算表上的所有数字。但我需要总结一下,从id 9到id 13,我会把它算作一个。我需要总结一下所有的顺序。