我有这张 table :
Table1
-----------------
ID VAL
-----------------
1 A
1 B
1 null
2 null
3 B
3 null
4 B
4 C
5 null
我想得到这个结果:
如果唯一值为 null 则返回 null,否则返回非 null 值(value)观
Table1
-----------------
ID VAL
-----------------
1 A
1 B
2 null
3 B
4 B
4 C
5 null
我尝试在 Case 中使用 Over Partition By,但我的语句由于多个子查询而变得过于复杂,如果我认为应该有一种简单的方法来做到这一点。
最佳答案
COUNT( value ) OVER ( PARTITION BY id )
分析函数将计算 value
所在的行数不是-NULL
对于每个 id
。您可以使用它来过滤行,如下所示:
SELECT id, value
FROM (
SELECT t.*,
COUNT( value ) OVER ( PARTITION BY id ) AS num_values
FROM yourtable t
)
WHERE value IS NOT NULL
OR num_values = 0;
If the only value is null then return null, else return non null values
如果你想确保NULL
仅当 id
正好有一行时才返回那么:
SELECT id, value
FROM (
SELECT t.*,
COUNT( * ) OVER ( PARTITION BY id ) AS num_rows
FROM yourtable t
)
WHERE value IS NOT NULL
OR num_rows = 1;
关于sql - Oracle SQL - 如果空值是唯一的,则保留空值,否则避免空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44303865/