sql - Oracle SQL - 如果空值是唯一的,则保留空值,否则避免空值

标签 sql oracle

我有这张 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/

相关文章:

sql - RDBMS 中传递依赖的问题是什么?

java - 我的 JDBC 有问题,但我不知道为什么

sql - Hibernate等于 "select 1 from DUAL"是什么?

oracle - 我如何将数据库大小从 11GB 增加到 20Gb 以上

php - 注意 : Undefined variable: csvFile inon line 160 , 警告 : fclose() expects parameter 1 to be resource, 第 160 行给出 null

SQL:如何使用仅代表一周中某些天的数据显示一周中的完整 7 天?

ruby-on-rails - rails : constraint violation on create but not on update

sql - 我只需要找到每个城市薪酬最高的员工

javascript - 如何将 Handsontable Json 数组插入(批量)到 oracle 表中?

oracle - plsql函数可以返回对象吗