基于ID值,如何查找表中具有ID值的列?

时间:2019-07-08 17:49:49

标签: sql-server

我有一个表,其中有一个标识列。对于每个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”

任何帮助如何实现此输出?

谢谢。

3 个答案:

答案 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