Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server中带有IF条件的CONCAT_Sql_Sql Server_Concat - Fatal编程技术网

SQL Server中带有IF条件的CONCAT

SQL Server中带有IF条件的CONCAT,sql,sql-server,concat,Sql,Sql Server,Concat,我有一个表,有四列,显示{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,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

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

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

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

您应该知道:
子字符串(“”,3100)
可以使用SqlServer。

使用。这很好,似乎是更紧凑的解决方案。谢谢
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
select substring(
           iif(a='YES','__A','') + iif(b='YES','__B','') + 
           iif(c='YES','__C','') + iif(d='YES','__D','')
       ,3,100) 
from table1