在SQL Server中使用IF条件的CONCAT

时间:2017-03-17 13:41:18

标签: sql sql-server concat

我有一个包含四列的表格,显示{YES,NO,N / A}值。我想要获得的是一列具有这些列的串联名称的列,其中列出了“是”和“#”。值由双下划线分隔。

\, A, B, C, D
1, YES, NO, YES, N/A
2, NO, YES, N/A, N/A
3, YES, NO, NO, YES

预期结果:

A__C
B
A__D

类似的东西:

select CONCAT(
IF(A = 'YES', 'A'),
IF(B = 'YES', 'B'),
IF(C = 'YES', 'C'),
IF(D = 'YES', 'D'))
from my_table

4 个答案:

答案 0 :(得分:4)

希望我理解你,你想要一个双下划线分隔符。 此解决方案无需任何子查询或cte处理即可运行。

select substring(
           iif(a='YES','__A','') + iif(b='YES','__B','') + 
           iif(c='YES','__C','') + iif(d='YES','__D','')
       ,3,100) 
from table1

应该知道这一点:substring('', 3, 100)将使用SqlServer。

答案 1 :(得分:3)

假设T1是你的表:

SELECT CASE WHEN LEN(X)>0 THEN LEFT(X, LEN(X)-2) ELSE '' END AS Y
 FROM (
     SELECT 
     CASE WHEN A='YES' THEN 'A__' ELSE '' END + CASE WHEN B='YES' THEN 'B__' ELSE '' END + CASE WHEN C='YES' THEN 'C__' ELSE '' END + CASE WHEN D='YES' THEN 'D__' ELSE '' END AS X
     FROM T1
     ) A

答案 2 :(得分:0)

Select case A then 'YES' then 'A' else '_'end + case B then 'YES' then 'B' else '_'end +case C then 'YES' then 'C' else '_'end +case D then 'YES' then 'D' else '_'end as result from my_table

答案 3 :(得分:0)

WITH ABC 
as 
( 
Select 
    (
    CASE WHEN A = 'YES' THEN 'A_' ELSE '' END as A +
    CASE WHEN B = 'YES' THEN 'B_' ELSE '' END as B +
    CASE WHEN C = 'YES' THEN 'C_' ELSE '' END as C +
    CASE WHEN D = 'YES' THEN 'D_' ELSE '' END as D 
    ) as output
)
Select case when len(output) = 2 then left (output,1)
       else output
       end as output
From ABC