json - 如何通过对没有 STRING_AGG 的不同列进行分组来创建 JSON 列(SQL Server)
问题描述
我有一张这样的桌子:
ID Number
A 10
A 11
B 10
C 9
C 10
... ...
我想在 SQL Server 中创建一个视图,如下所示:
id number
A [10,11]
B [10]
C [9,10]
...
我在 PostgreSQL 中创建了以下内容:
CREATE VIEW "EXAMPLE" AS
SELECT
ID as "id",
json_agg (Number Order By Number DESC) AS "number"
FROM "exampleX"
GROUP BY ID
我如何在不使用 STRING_AGG 的情况下在 sql server 中做到这一点。
解决方案
之前STRING_AGG
(在 SQL Server 2017 中添加)聚合字符串的旧方法是使用FOR XML PATH
和子查询:
WITH YourTable AS(
SELECT *
FROM (VALUES
('A',10),
('A',11),
('B',10),
('C', 9),
('C',10))V(ID,Number))
SELECT YT.ID,
STUFF((SELECT CONCAT(',',sq.Number)
FROM YourTable sq
WHERE sq.ID = YT.ID
FOR XML PATH(''),TYPE).value('.','varchar(MAX)'),1,1,'') AS Numbers
FROM YourTable YT
GROUP BY YT.ID;
推荐阅读
- java - Java JDBC Single Statement 对象在 while 循环之前和 while 循环内
- swift - Swift - 视图控制器之间的向前和向后动画
- javascript - 使用 JavaScript 多次追加节点只追加一次
- cmake - 在 ROS 包中使用自定义 OpenCV 安装
- pandas - 将数据框中的多行与相同的键值组合起来
- r - 如何仅在某些位置替换文本,例如(“披头士乐队”或“披头士乐队”)
- swift - 方法 renderer(_:didAdd node:, for anchor:) 未调用
- excel - 防止在锁定的单元格中粘贴值
- azure - Azure Key Vault 证书:找不到密钥
- scala - 扩展密封特征的案例类上的“fromString”方法