首页 > 解决方案 > 在保留组的同时删除空值

问题描述

我有一个通过多个连接创建的表,类似于下面的内容

Episode|Case|Description|code|
------------------------------
1      |b22 |something..| a23|
1      |a12 |null       |null|
2      |gh11|something..| a23|
3      |b877|something..|7thb|

从本质上讲,这一集是独一无二的,但每一集可能有多个案例,也可能没有多个案例,然后对于每个案例,其中会有描述和代码 - 对于某一集的某些案例,这些可能为空。

我需要做的是删除空行,但不删除剧集。因此,如果一个情节出现一次并且它具有空值,我需要保留它,如果它出现 5 次并且具有 3 行的空值,我想摆脱 3 个空行。

我已经尝试了一段时间,但我只是不确定如何实现我想要实现的目标。

标签: sql

解决方案


NOT EXISTS

select t.* from tablename t
where coalesce(t.description, t.code) is not null
or not exists (
  select 1 from tablename
  where episode = t.episode and coalesce(description, code) is not null
)

演示
结果:

| Episode | Case | Description | code |
| ------- | ---- | ----------- | ---- |
| 1       | b22  | something.. | a23  |
| 2       | gh11 | something.. | a23  |
| 3       | b877 | something.. | 7thb |

推荐阅读