[英]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.