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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获得单行和2列结果:第一列中包含count(*),第二列中包含连接字符串相关的知识,希望对你有一定的参考价值。

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

答案

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

以上是关于获得单行和2列结果:第一列中包含count(*),第二列中包含连接字符串的主要内容,如果未能解决你的问题,请参考以下文章

oracle查询将不同的列填充到一列中

COUNT()

更新两个表中的数据。一种在一列中包含多个数据

PHP计算一列中包含相同值的MYSQL行

用SQL怎么把一列所有字符串中包含的空格都删除呢

pyspark:删除作为另一列值的子字符串,并从给定列的值中包含正则表达式字符