SQL按顺序计算个数
Posted
技术标签:
【中文标题】SQL按顺序计算个数【英文标题】:SQL counting the number of ones in sequence 【发布时间】:2018-03-26 06:55:29 【问题描述】:我有下表,您可以看到 ID 不一样。所以我不能分组。我需要计算所有按顺序排列的。比如从 id 9 到 13,从 id 20 到 23。我是怎么做到的?
【问题讨论】:
请阅读meta.***.com/questions/285551/… 和接受的答案 sql-server 2012 您尚未指定预期的输出。 您能否提及您的预期输出。您接受的解决方案似乎没有给出正确的结果。 【参考方案1】:这是LAG
和LEAD
的解决方案。
;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
),并将其结果用于求和。
【讨论】:
代码没有给出预期的输出,只给出一个数字。 好的,这正在计算桌子上所有的。但我需要总结一下,就像在 id 9 到 13 之间,我会把它算作一个。我需要总结所有的序列。以上是关于SQL按顺序计算个数的主要内容,如果未能解决你的问题,请参考以下文章