获得单行和2列结果:第一列中包含count(*),第二列中包含连接字符串

问题描述 投票:1回答:1

表:我在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(*)为零。

sql sql-server-2012
1个回答
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版本无法做到。)

© www.soinside.com 2019 - 2024. All rights reserved.