SQL Server 选择并显示JSON列中数组的命名元素

06odsfpq  于 2022-12-26  发布在  其他
关注(0)|答案(1)|浏览(95)

在Azure SQL中,我有一个表“violation”,其中包含一个JSON列“course_json”,该列包含一个数组。

[{
    "course_int": "1465",
    "course_key": "LEND1254",
    "course_name": "Mortgage Servicing Introduction",
    "test_int": "0"
}, {
    "course_int": "1464",
    "course_key": "LEND1211",
    "course_name": "Mortgage Servicing Transfer",
    "test_int": "0"
}]

我想选择违规表中的行,并将表的列和“course_key”显示为:

LEND12654,LEND1211

如果course_key的数目总是固定的,那么我可以用途:

select person_id,event_date, JSON_VALUE(course_json, '$[0].course_key') + ',' + JSON_VALUE(course_json, '$[1].course_key')  from violation

但它们不是固定的......可能有一个,两个,十个......我永远不会知道。
那么,是否可以迭代所有course_keys并以逗号分隔的格式显示它们呢?

huwehgph

huwehgph1#

不使用JSON_VALUE,而是使用OPENJSON获取所有课程,使用STRING_AGG构建course_key分隔列表。

SELECT
      person_id
    , event_date
    , (SELECT STRING_AGG(course_key,',')
       FROM OPENJSON(course_json)
       WITH (
           course_key nvarchar(MAX) '$.course_key'
      )) AS course_key
FROM dbo.violation;

| 个人标识|事件日期|课程_密钥|
| - ------| - ------| - ------|
| 1个|二〇二二年十二月二十一日|LEND1254、LEND1211|

相关问题