首页 > 解决方案 > 如何使用 union all 处理多个 select 语句

问题描述

我必须通过使用 union all 的多个 SQL 语句来获得结果,这就像:

select column1,column2 from table1 where column4 ='value1' union all
select column1,column2 from table1 where column4 ='value2' union all
select column1,column2 from table1 where column4 ='value3' union all
select column1,column2 from table1 where column4 ='value4' union all
select column1,column2 from table1 where column4 ='value5'

对于上面,我只会得到两个结果:

column1  column2
XXXXX    XXXXX
XXXXX   XXXXX 

因为另外 2 个选择查询没有结果。但我需要在结果表中记录空值或没有值,例如:

column1  column2
XXXXX    XXXXX
Null     Null
XXXXX    XXXXX
Null     Null 

怎么能得到这样的结果??

我是否可以通过在多个 sql 语句中使用 if 语句来处理空值。

标签: sqlsql-server

解决方案


与其使用 a UNION ALL,不如使用 CTE 创建值列表,然后使用LEFT JOIN. 这使您不再需要扫描表 5 次:

WITH VTE AS (
    SELECT Column4
    FROM (VALUES('value1'),('value2'),('value3'),('value4'),('value5')) V(Column4))
SELECT YT.Column1, YT.Column2, V.Column4
FROM VTE V
     LEFT JOIN YourTable YT ON V.Column4 = YT.Column4;

推荐阅读