获得单排& 2列结果:第1列中包含count(*),第2列中包含连接字符串

时间:2018-05-22 20:30:51

标签: sql sql-server-2012

表:我在SQL Server 2012中有一个数据库表table_1,其数据为:

CREATE TABLE table_1 ([ID] BIT, [Name] VARCHAR(10))

INSERT INTO table_1 ([ID],[Name]) VALUES (1,'A')
INSERT INTO table_1 ([ID],[Name]) VALUES (0,'B')
INSERT INTO table_1 ([ID],[Name]) VALUES (0,'C')

我想要的是是一行,结果中有两列。像:

col_1   col_2
2       B, C have zero value

所以我想知道列[ID]中的条目数是0,然后在结果中显示col_1的计数。然后当列[ID]为0时,col_2应该具有列[name]中的所有(连接的)字符串。以后从列[name]获取连接字符串的部分是我无法获得的。

它必须非常简单但我无法在此SQL之外完成它:

 SELECT COUNT(*) AS col_1 FROM table_1 WHERE ID = 0;

如何添加第二列col_2,它们会从col_2中连接字符串? 如果count(*)为零,则col_2可以为空。 (如果我可以添加NA,会很棒)

我尝试使用来自这些线程url1url2的解决方案,但是当ID列没有任何0时,我无法自定义它以使count(*)为零。

1 个答案:

答案 0 :(得分:1)

获取已在子查询中链接的字符串连接的解决方案以获取文本。将它与另一个子查询放在一起计算。并选择col_1另一个为col_2

SELECT (SELECT count(*)
               FROM table_1
               WHERE ID = 0) col_1,
        (SELECT substring((SELECT ', ' + Name [text()]
                                  FROM table_1
                                  WHERE ID = 0
                                  FOR XML PATH('')),
                          3,
                          len((SELECT ', ' + Name [text()]
                                      FROM table_1
                                      WHERE ID = 0
                                      FOR XML PATH(''))) - 2)) col_2;

(在SQL Server 2014上测试过,但就我理解的文档而言,应该没有任何内容,2012版本无法做到。)