【发布时间】:2020-06-23 18:43:12
【问题描述】:
我想计算窗口 v 中的间隙(用 NULL 填充的列),但我不知道如何。
IF OBJECT_ID('tempdb..#X') IS NOT NULL DROP TABLE #X;
CREATE TABLE #X
(
ID INT IDENTITY(1,1) PRIMARY KEY,
v INT
);
INSERT INTO #X
SELECT 121 UNION ALL SELECT NULL UNION ALL SELECT NULL
UNION ALL SELECT 312 UNION ALL SELECT NULL UNION ALL SELECT NULL UNION ALL SELECT NULL
UNION ALL SELECT 123 UNION ALL SELECT NULL UNION ALL SELECT NULL
UNION ALL SELECT 415 UNION ALL SELECT 416 UNION ALL SELECT NULL UNION ALL SELECT NULL UNION ALL SELECT NULL
UNION ALL SELECT 200;
SELECT
ID, v, s, n, m, x, c
FROM
(SELECT
ID, v,
MAX(v) OVER (PARTITION BY c) s,
ROW_NUMBER() OVER (PARTITION BY c ORDER BY ID DESC) n,
ROW_NUMBER() OVER (PARTITION BY c ORDER BY ID) - 1 m,
COUNT(CASE WHEN v IS NULL THEN 1 END) OVER (PARTITION BY c) x,
c
FROM
(SELECT
ID, v,
-- c = COUNT(CASE WHEN v IS NULL THEN 1 END) OVER (ORDER BY ID)
c = COUNT(v) OVER (ORDER BY ID)
FROM
#X) a
) a
ORDER BY
ID;
计算 c 已接近,但它不适用于一行中的两个填充列。
谁能给个提示?
谢谢你们,这对我有用。
【问题讨论】:
-
请显示您想要的结果集。
标签: sql sql-server tsql window-functions