SQL Server:有条件地选择SELECT

时间:2016-05-20 10:02:36

标签: sql sql-server

我有一个包含不同列的表,我需要根据特定列的值显示不同。

我的表就像这样:

select col1, col2, col3, col4, col5, col6
from table1

所以,例如:

如果col1 ='1' - >显示col3和col4。

如果col2 ='1' - >显示col5和col6

2 个答案:

答案 0 :(得分:4)

使用case表达式选择要返回的列。请注意,案例的返回类型必须兼容,即col3和col5,以及col4和col6。

select case when col1 = 1 then col3
            when col2 = 1 then col5
       end,
       case when col1 = 1 then col4
            when col2 = 1 then col6
       end
from tablename

或者,执行UNION ALL

select col3, col4
from tablename where col1 = 1
union all
select col5, col6
from tablename where col2 = 1

剩下的问题 - 如果col1和col2都是1,该怎么办?或者如果它们都不是?

答案 1 :(得分:1)

经验法则1:将用于过滤的列返回给调用者。

经验法则2:不要使用union all,它会返回重复项,而你的结果也不会是'关系'(虽然在这种情况下不会有重复项,因为col1是关键但我仍然认为union表明最佳意图。

select col1, col2, col3 AS colum_a, col4 AS colum_b
from table1
where col1 = 1
union
select col1, col2, col5 AS colum_a, col6 AS colum_b
from table1
where col2 = 1;