我在这里看到很多论坛对我的情况不起作用。我有
Col_1, Col_2, Col_3, Col_n TRUE FALSE FALSE FALSE FALSE TRUE TRUE FALSE TRUE FALSE FALSE TRUE
我需要创建一个select语句,返回一个包含以下结果的新列:
New_Column Col_1 Col_2, Col_3 Col_1, Col_n
换句话说,如果列为True
,则将列名称添加到我的新列。所以我的结果集看起来像:
myID, myName, myDesc, Col_1, Col_2, Col_3, Col_n, New_Column
我试过了:
SELECT
myID,
myName,
myDesc,
((CASE WHEN col_1 = 'TRUE' THEN 'col_1' END) + ', ' + (CASE WHEN col_2 = 'TRUE' THEN 'col_2' END) + ', ' + (CASE WHEN col_3 = 'TRUE' THEN 'col_3' END) + ', ' + (CASE WHEN col_n = 'TRUE' THEN 'col_n' END) ) as New_Column
FROM myTable
但结果集不正确。如何通过给我的设计获得我需要的结果集?
当我说结果不正确时,我的意思是:
myID, myName, myDesc, Col_1, Col_2, Col_3, Col_n, New_Column
Data, Data, TRUE, False, false, true, Null
Data, Data, false, Col_2, Col_3, false, Null
Data, Data, Col_1, Null, Null, Col_n, Col_1Col_2Col_3Col_n
这就是我的期望:
myID, myName, myDesc, Col_1, Col_2, Col_3, Col_n, New_Column
Data, data, Col_1, Col_2, NULL, Col_N, Col_1Col_2Col_N
答案 0 :(得分:0)
我的猜测是你得到一个NULL结果,因为当列为FALSE时,每个CASE子句都会返回NULL。你应该做的事情如下:
BEGIN TRAN
CREATE TABLE MyTable (col_1 VARCHAR(5),
col_2 VARCHAR(5),
col_3 VARCHAR (5),
col_n VARCHAR(5)
)
INSERT INTO MyTable
SELECT 'TRUE', 'FALSE', 'TRUE', 'TRUE'
UNION ALL
SELECT 'FALSE', 'FALSE', 'FALSE', 'FALSE'
SELECT STUFF(( CASE WHEN col_1 = 'TRUE' THEN ',col_1'
ELSE ''
END ) + ( CASE WHEN col_2 = 'TRUE' THEN ',col_2'
ELSE ''
END ) + ( CASE WHEN col_3 = 'TRUE' THEN ',col_3'
ELSE ''
END )
+ ( CASE WHEN col_n = 'TRUE' THEN ',col_n'
ELSE ''
END ), 1, 1, '') AS New_Column
FROM myTable
ROLLBACK