sql - 获取单行和 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 会很棒)
我尝试使用来自这些线程url1和url2的解决方案,但是当 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 版做不到。)
推荐阅读
- gradle - Gradle Liquibase 集成
- angular - LocalNotification - 如何使用它?
- ruby-on-rails - 在 Rails 中为 form_tag 添加命名空间
- networking - 创建和发送自定义数据包的最佳方式
- amazon-elb - AWS ALB 返回 502 并且请求未达到目标
- c# - 新版 Nswag 生成不兼容的数据类型
- mongodb - 重命名 MongoDB 4.0.4 数据库名称
- angular - Mapbox not works global 未定义
- javascript - 调整 Internet 窗口浏览器大小时,有没有办法保留 OpenStreetMap 背景图像?
- ios - 在 Swift 中使用静态单元格和动态原型