sql - 从数据库中过滤唯一记录,同时删除双非空值

标签 sql sql-server-2008-r2

这有点难以用语言解释,但这里是我尝试在 SQL 中执行的操作的示例。我有一个查询返回以下记录:

ID     Z
---   ---
1      A
1      <null>
2      B
2      E
3      D
4      <null>
4      F
5      <null>

我需要过滤此查询,以便每个唯一记录(基于 ID)仅在输出中出现一次,如果同一 ID 有多个记录,则输出应包含 Z 列值为 <强>非空。如果给定 ID 只有一条记录,并且 Z 列的值为 null,则输出仍应返回该记录。因此上述查询的输出应如下所示:

ID     Z
---   ---   
1      A
2      B
2      E
3      D
4      F
5      <null> 

您将如何在 SQL 中执行此操作?

最佳答案

您可以使用GROUP BY来实现:

SELECT
    ID, MAX(Z) -- Could be MIN(Z)
FROM MyTable
GROUP BY ID

聚合函数忽略 NULL,仅当组中的所有值均为 NULL 时才返回它们。

关于sql - 从数据库中过滤唯一记录,同时删除双非空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18211137/

相关文章:

sql-server - 如何在 SQL Server 中将工作日中多个时间戳的时间分类为“入”和“出”

mysql - 如何编写日期值适合一个范围内和另一个范围外的连接查询

c# - Entity Framework 多重级联删除

c# - 使用关系更新数据表

使用存储过程进行具有唯一约束的 SQL 插入

sql-server - sql server 选择第一次出现的数据更改

sql - 从多个 ID 中获取最接近的日期

sql - 如何将 `SELECT ... INTO` 与 UNION 一起使用?

mysql - 使用 Self 上的 IN 子查询优化更新查询

php - 试图让 php 查询每天只发生一次