首页 > 解决方案 > 获取单行和 2 列结果:在第 1 列中使用 count(*),在第 2 列中使用连接字符串

问题描述

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

标签: sqlsql-server-2012

解决方案


采用已在子查询中链接的字符串连接的解决方案来获取文本。将其与计数的另一个子查询放在一起。并选择一个作为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 版做不到。)


推荐阅读