我有一个表,其中有一个标识列。对于每个ID,其他列的值将为0或1。我需要找到多少列为1并将其列为逗号分隔的string。
这是我的桌子
ID T1 T2 T3
1 1 0 0
2 0 1 1
3 1 1 1
预期输出
ID 1 2 3-- COLUMNS
1 t1 t2,t3 t1,t2,t3
在第1列下,该值应为“ t1”,因为t1的值为“ 1”
在第2列下,该值应为“ t2,t3”,因为t2,t3的值为“ 1”
在第3列下,该值应为“ t1,t2,t3”,因为t1,t2,t3的值为“ 1”
任何帮助如何实现此输出?
谢谢。
答案 0 :(得分:0)
WITH T AS (
SELECT ID, CASE WHEN T1 = 0 THEN NULL ELSE 'T1' END AS T1, CASE WHEN T2 = 0 THEN NULL ELSE 'T2' END AS T2, CASE WHEN T3 = 0 THEN NULL ELSE 'T3' END AS T3 FROM Foo
)
SELECT ID, SUBSTRING(CONCAT(', ' + T1, ', ' + T2, ', ' + T3), 3, 100) AS Result FROM T
第一个选择将这些列转换为它们的名称或NULL
,第二个选择将它们连接成一个逗号(+空格)定界符列表。
答案 1 :(得分:0)
如果您正在寻找一个简单的函数来启用您的任务,请从SQL Server中将文件导出为.csv文件,然后在excel端应用连接函数。
= CONCATENATE(A1,“,”,B1)
在SQL方面, CONCAT(string1,string2,....,string_n)
答案 2 :(得分:0)
感谢您的帮助。
我能够从下面的代码中获得所需的结果。但是@Christoph发表的文章比我的要简单得多。
无论如何都要发布我的方法如下。
#Name