Это требование может указывать на проблему с вашим дизайном. Если значения в 4 столбцах семантически эквивалентны, вы, вероятно, обнаружите, что поместите их в первую нормальную форму и рефакторинг повторяющихся столбцов в новую таблицу облегчит проблему такого рода.
Заявление монстра CASE
, вероятно, будет гораздо более эффективным, но вот один из способов без
WITH t AS
(
SELECT 1 as rowid, 'cat' as C1, 'apple' As C2,
'bear' AS C3, 'fox' AS C4 UNION ALL
SELECT 2 as rowid, 'B' as C1, 'D' As C2, 'E' AS C3, 'G' AS C4
)
SELECT rowid, STUFF((SELECT ',' + C FROM
(
SELECT C1 AS C FROM t t2 WHERE t.rowId = t2.rowId
UNION ALL
SELECT C2 AS C FROM t t2 WHERE t.rowId = t2.rowId
UNION ALL
SELECT C3 AS C FROM t t2 WHERE t.rowId = t2.rowId
UNION ALL
SELECT C4 AS C FROM t t2 WHERE t.rowId = t2.rowId
) D
ORDER BY C
FOR XML PATH('')),1,1,'') X
Придает
rowid X
1 apple,bear,cat,fox
2 B,D,E,G