繁体   English   中英

SQL Server从多个列中删除空值

[英]SQL Server Remove Nulls from multiple columns

我有以下代码:

SELECT DISTINCT agentIds,
CASE WHEN bvagnt LIKE 'A%A' THEN bvname END AS [Level 1],
CASE WHEN bvagnt LIKE 'A%G' THEN bvname END AS [level 2],
CASE WHEN bvagnt LIKE 'A%M' THEN bvname END AS [level 3]
FROM agents

结果如下:

agentIds    Level 1         level 2                         level 3
A3090A      JASON COLBY     NULL                            NULL
A5097G      NULL            GARITY ASSOCIATES BROKERAGE     NULL
A8505M      NULL            NULL                            NAIM 

我想要的是选择前1个但不希望有任何Null的结果,我希望结果不包含agentIds列:

Level 1         level 2                         level 3
JASON COLBY     GARITY ASSOCIATES BROKERAGE     NAIM 

我做了where语句,并选择了每一列都不为NULL,但是它没有用,也没有产生期望的结果。

解决此问题的最佳方法是什么? 这是一个临时表:

CREATE TABLE #table1
(agentid varchar(5),
Level1 varchar(50),
Level2 varchar(50),
Level3 varchar(50))

INSERT INTO #table1 VALUES ('A123A', 'NULL', 'PartB', 'NULL')
INSERT INTO #table1 VALUES ('A123G', 'PartA', 'NULL', 'NULL')
INSERT INTO #table1 VALUES ('A123M', 'NULL', 'NULL', 'PartC')

SELECT * FROM #table1

DROP TABLE #table1

如果只期望一个结果行,则以下查询将起作用:

SELECT a.bvname as [Level 1], b.bvname as [Level 2], c.bvname as [Level 3]
FROM
(SELECT bvname FROM agents where bvagnt LIKE 'A%A') a,
(SELECT bvname FROM agents where bvagnt LIKE 'A%G') b,
(SELECT bvname FROM agents where bvagnt LIKE 'A%M') c,

与其使用distinct ,不如使用聚合:

SELECT MAX(CASE WHEN bvagnt LIKE 'A%A' THEN bvname END) AS [Level 1],
       MAX(CASE WHEN bvagnt LIKE 'A%G' THEN bvname END) AS [level 2],
       MAX(CASE WHEN bvagnt LIKE 'A%M' THEN bvname END) AS [level 3]
FROM agents;

这是你想要的?

SELECT MAX(LEVEL1) LEVEL1
, MAX(LEVEL2) LEVEL2
, MAX(LEVEL3) LEVEL3
FROM #table1

我假设您每列只有1个合法值...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM