【问题标题】:How to create a JSON column by grouping a different column without STRING_AGG (SQL Server)如何通过对没有 STRING_AGG 的不同列进行分组来创建 JSON 列(SQL Server)
【发布时间】:2020-03-16 12:21:17
【问题描述】:

我有一张这样的桌子:

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 中做到这一点。

【问题讨论】:

  • 您的 SQL Server 版本是多少?
  • 如果您可以访问STRING_AGG,您也可以访问FOR JSON
  • SQL SERVER 2016
  • 哦,所以你没有STRING_AGG;所以当你说没有STRING_AGG时,你的意思是你不能使用它,因为版本。

标签: json sql-server group-by sql-server-2016


【解决方案1】:

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;

【讨论】:

  • 谢谢,这个解决方案解决了我的问题。但是如何在此解决方案中执行“按数字 DESC 排序”?
  • 只需将ORDER BY 添加到子查询@zero 中。
猜你喜欢
  • 2015-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-12
相关资源
最近更新 更多