Я хочу посчитать пробелы (столбцы, заполненные NULL) в окне v, но я не знаю, как.
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 близко, но он не работает на двух заполненных столбцах подряд.
Может кто-нибудь дать подсказку, пожалуйста?
Спасибо, ребята, теперь это работает для меня.