首页 > 解决方案 > 如何通过对没有 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 中做到这一点。

标签: jsonsql-servergroup-bysql-server-2016

解决方案


之前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;

推荐阅读