此論壇問題是希望可以針對每筆資料和它之後的兩筆資料進行加總(每三筆連續資料進行加總),萬一該筆資料後面沒有辦法湊成三筆資料的話,加總值以 NULL 表示。
SELECT
T.ID ,
T.Data ,
IIF(Judge IS NULL , NULL , Cum3) AS Cum3
FROM
(
SELECT * ,
LEAD(Data,2,NULL) OVER (ORDER BY ID) AS Judge ,
SUM(Data) OVER (ORDER BY ID ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING) AS Cum3
FROM @Temp
) AS T
SELECT
T.ID ,
T.Data ,
IIF(Judge = 3 , Cum3 , NULL) AS Cum3
FROM
(
SELECT * ,
SUM(1) OVER (ORDER BY ID ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING) AS Judge ,
SUM(Data) OVER (ORDER BY ID ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING) AS Cum3
FROM @Temp
) AS T
- 邏輯分析:利用產生的 Sample Data 來說明判斷連續資料
DECLARE @Temp TABLE (id int)
INSERT INTO @Temp VALUES(1)
INSERT INTO @Temp VALUES(4)
INSERT INTO @Temp VALUES(13)
INSERT INTO @Temp VALUES(7)
INSERT INTO @Temp VALUES(9)
INSERT INTO @Temp VALUES(29)
INSERT INTO @Temp VALUES(20)
INSERT INTO @Temp VALUES(24)
INSERT INTO @Temp VALUES(32)
INSERT INTO @Temp VALUES(10)
INSERT INTO @Temp VALUES(22)
INSERT INTO @Temp VALUES(27)
抓取每筆資料之後的第二筆資料,假如回傳 NULL 值,表示抓不到該筆資料之後的第二筆資料,非 NULL 資料則為連續三筆資料。
SELECT
T.ID ,
T.Judge ,
IIF(Judge IS NULL , '否' , '是') AS [是否連續三筆資料]
FROM
(
SELECT * ,
LEAD
(
ID
, 2
, NULL
) OVER (ORDER BY ID) AS Judge
FROM @Temp
) AS T
利用 SUM() 搭配 OVER 來判斷是否連續三筆資料,每一筆資料給定常數 1 ,每三筆資料進行累積,結果為 3 的話,表示為連續三筆資料。
SELECT
T.id ,
T.Judge ,
IIF(Judge = 3 , '是' , '否') AS [是否連續三筆資料]
FROM
(
SELECT ID ,
SUM
(
1
)
OVER
(
ORDER BY ID
ROWS BETWEEN CURRENT ROW AND 2 FOLLOWING
) AS Judge
FROM @Temp
) AS T
沒有留言:
張貼留言