如何返回没有空值的记录

oknwwptz  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(325)

如何在没有子查询的情况下查询返回值为500、250的行?

CREATE TABLE [dbo].[DemoTbl]
(
    [ACount] [int] NULL,
    [BCount] [int] NULL
) ON [PRIMARY]
GO

INSERT INTO [dbo].[DemoTbl] ([ACount], [BCount]) VALUES (NULL, 250)
INSERT INTO [dbo].[DemoTbl] ([ACount], [BCount]) VALUES (500, NULL)
dy2hfwbg

dy2hfwbg1#

对于此数据集,您可以只使用聚合:

select max(acount) acount, max(bcount) bcount
from mytable
n9vozmp4

n9vozmp42#

正确的方法是合并 nulls 转换为某个非空值,该值位于列的域之外(也就是说,其他情况下不会出现的值)。
这个答案,由@gmb,https://stackoverflow.com/a/62585518/467473,将结果集的所有行折叠为一行,这是完全不同的数据表示形式。
如果你的table看起来像

A    B    C
---- ---- ----
  1  null   6  
null   5  null
  8    3    2

然后运行查询

select max(A) as A,
       max(B) as B,
       max(C)
from example_table

您将得到1行结果集

A    B    C
---- ---- ----
  8    5    6

这可能不是你想要的。
所以,你想说一些类似的话(使用我上面的示例表):

select coalesce(A,-1) as A,
       coalesce(B,-1) as B,
       coalesce(C,-1) as C
from example_table

这就产生了

A    B    C
---- ---- ----
  1   -1    6  
 -1    5   -1
  8    3    2

[数据的接收者仍然必须决定如何处理丢失/未知的值(什么 null 表示),但您保持了元组的标识和结果集的基数。]

相关问题