SQL Server中带有IF条件的CONCAT
我有一个表,有四列,显示{YES,NO,N/a}值。我想要得到的是一个列,其中列的名称串联在一起,这些列表示一个由双下划线分隔的“YES”值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
\, 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