【问题标题】:CONCAT with IF condition in SQL ServerSQL Server 中带有 IF 条件的 CONCAT
【发布时间】:2017-08-09 02:29:01
【问题描述】:

我有一个表格,其中有四列显示 {YES, NO, N/A} 值。我想要获得的是一列,这些列的名称串联在一起,这些列的名称由双下划线分隔,呈现“YES”值。

\, 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

【问题讨论】:

标签: sql sql-server concat


【解决方案1】:

希望我理解你的意思,你想要一个双下划线分隔符。 此解决方案无需任何子查询或 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。

【讨论】:

  • 这工作得很好,似乎是更紧凑的解决方案。谢谢!
【解决方案2】:

假设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

【讨论】:

    【解决方案3】:
    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
    

    【讨论】:

      【解决方案4】:
      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
      

      【讨论】:

        猜你喜欢
        • 2011-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多