sql-server - 选择以逗号分隔的摘要计数?
问题描述
SQL Server,如何选择以逗号分隔的摘要计数?
我有数据:
DECLARE @TB TABLE (ID INT, APP VARCHAR(1))
INSERT INTO @TB
VALUES
(1, 'A'),
(1, 'A'),
(1, 'B'),
(1, 'C'),
(1, 'C'),
(2, 'A'),
(2, 'B'),
(2, 'B')
我想查询这样的结果:
解决方案
如果您使用的是 SQL Server 2017或更高版本,则可以使用 STRING_AGG 如下 -
DECLARE @TB TABLE (ID INT, APP VARCHAR(1))
INSERT INTO @TB
VALUES
(1, 'A'),
(1, 'A'),
(1, 'B'),
(1, 'C'),
(1, 'C'),
(2, 'A'),
(2, 'B'),
(2, 'B')
SELECT
ID, STRING_AGG (T, ',')
FROM
(SELECT ID, APP + ' ' + CAST(COUNT(*) AS VARCHAR) T
FROM @tb
GROUP BY ID,APP) A
GROUP BY ID
对于 SQL Server 2016 或更早版本 -
SELECT
ID,
abc = STUFF((SELECT ',' + T
FROM
(SELECT ID, APP + ' ' + CAST(COUNT(*) AS VARCHAR) T
FROM @tb
GROUP BY ID, APP) t1
WHERE t1.id = t2.id
FOR XML PATH ('')), 1, 1, '')
FROM
@tb t2
GROUP BY
id;
推荐阅读
- javascript - 想要在单击元素时为其添加 CSS 类
- c# - DataFormatString TimeSpan - 如何显示超过 24 小时?
- javascript - 如何通过 url 参数更改打开的图形元标记内容
- c++ - C++ 二进制文件处理抛出异常 0x006787EA
- assembly - 将 64 位寄存器的一个字节移动到 8 位寄存器
- apache-kafka - Logstash Kafka 输出插件
- c# - 使用 C#(在 UiPath 中)使用不带附件的 Exchange Web 服务获取电子邮件
- android - 带有主题样式的 TextAppearanceSpan
- r - 使用R查找日期是否在区间内
- vue.js - VueJS 在循环中两次渲染变量