sql - 某些列中的结果为空

标签 sql sql-server

我正在努力减少每天在表格中插入的行数。

在其中大约 5% 到 10% 的情况下,我得到的只是主键值。 我想知道是否有任何方法可以只选择超过 PK 值的行。

比如我现在得到的结果:

PK1    PK2    cl1    cl2    cl3    cl4
---------------------------------------------------------------------------
a      Louis  null   null   171    15
a      Jack   13     null   null   null
a      Marty  17     14     130    null
b      Louis  10     11     110    12
b      Jack   03     null   185    null
b      Marty  null   null   null   null
c      Louis  16     48     null   25
c      Jack   null   null   null   null
c      Marty  13     null   null   64
d      Louis  null   null   null   null
d      Jack   21     12     165    null
d      Marty  null   null   null   null

我想要的结果:

PK1    PK2    cl1    cl2    cl3    cl4
---------------------------------------------------------------------------
a      Louis  null   null   171    15
a      Jack   13     null   null   null
a      Marty  17     14     130    null
b      Louis  10     11     110    12
b      Jack   03     null   185    null

c      Louis  16     48     null   25

c      Marty  13     null   null   64

d      Jack   21     12     165    null

SQL 中是否有任何请求可以更改为该请求?现在我在下面使用这个

SELECT 
    table.PK1,table.PK2,
    table.cl1,table.cl2,table.cl3,table.cl4,
FROM
    datatable table

提前致谢

编辑:这是一个例子,有一百多个列(不是 pk),我不想用“where”过滤。 (或者只是在最坏的情况下)

最佳答案

您可以使用 coalesce功能。它接受任意数量的参数并返回第一个非空参数。例如:

select coalesce(3, 1, 4);            -->  3
select coalesce(3, null, 4);         -->  3
select coalesce(null, 1, 4);         -->  1
select coalesce(null, null, 4);      -->  4
select coalesce(null, null, null);   -->  null

您可以使用它来检查是否所有列都是null:

where coalesce(col1, col2, ..., colN) is null

关于sql - 某些列中的结果为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49904019/

相关文章:

sql-server - select where id not in (...) 有什么限制吗? - 不存在 VS 不存在

mysql - Node.js MySQL 批量插入操作失败

sql-server - SQL Server 递归存储过程

sql - 如何按顺序将记录从到列检索到单个列中?

Mysql:从转储表中标记插入的行

sql - 使用递归 CTE 处理日期逻辑

sql-server - Delphi XE 中从 SQL 日期转换为日期时间

c# - C# 中的 Azure SQL DB 连接问题

sql - 从任意 %ROWTYPE 或 RECORD 值获取表名

mysql - Left Join ON LIKE 需要像 LIMIT 这样的东西