我有一个表格,其中 id 是重复的。
+-------+------+
ID NUM
+-------+------+
1 50
1 51
2 52
2 NULL
3 NULL
3 NULL
4 53
4 54
4 NULL
5 NULL
6 55
7 NULL
+-------+------+
Run Code Online (Sandbox Code Playgroud)
我想得到表,其中我只有在标记为 (num) 的列中同时具有空值和非空值的 id
像这样
+------+-----+
ID NUM
+------+-----+
2 52
2 NULL
4 53
4 54
4 NULL
+------+-----+
Run Code Online (Sandbox Code Playgroud)
WITH cte AS ( SELECT id,
num,
COUNT(*) OVER (PARTITION BY id) total,
COUNT(num) OVER (PARTITION BY id) notnull
FROM mytable )
SELECT id, num
FROM cte
WHERE notnull * (total - notnull) > 0
Run Code Online (Sandbox Code Playgroud)
或者
WITH cte AS ( SELECT id,
num,
FIRST_VALUE(num) OVER (PARTITION BY id ORDER BY num) mini,
FIRST_VALUE(num) OVER (PARTITION BY id ORDER BY num DESC) maxi
FROM mytable )
SELECT id, num
FROM cte
WHERE mini IS NULL
AND maxi IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
505 次 |
最近记录: |