目前我有这段代码

DECLARE @json NVARCHAR(MAX) 
SET @json = 
N'[
   {
     "objOrg": {
       "EmpIds": [
         {
           "Id": 101
         },
         {
           "Id": 102
         },
         {
           "Id": 103
         }
       ]
     }
   }
 ]'

如何返回以数据透视的EmpId值,例如

Id1 Id2 Id3
101 102 103

推荐答案

您可以使用OPENJSON()ROW_NUMBER()窗口功能,例如

DECLARE 
    @json   AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX);
        
SET @json = 
N'[
   {
     "objOrg": {
       "EmpIds": [
         {
           "Id": 101
         },
         {
           "Id": 102
         },
         {
           "Id": 103
         }
       ]
     }
   }
 ]';
 
 SELECT j.*, ROW_NUMBER() OVER (ORDER BY j.Id) AS rn
   INTO t_json
     FROM OPENJSON(@json)
              WITH (
                    JS NVARCHAR(MAX) '$.objOrg.EmpIds' AS JSON 
                  ) AS j0
    CROSS APPLY OPENJSON (j0.JS) 
                WITH (
                      Id   INT '$.Id' 
                    ) AS j; 
                    
SET @query = CONCAT('SELECT',
              STUFF(
                   (SELECT CONCAT(', MAX(CASE WHEN rn=' , CAST(rn AS VARCHAR) , ' THEN Id END) AS Id', CAST(rn AS VARCHAR))
                      FROM t_json
                     ORDER BY rn 
                       FOR XML PATH(''), type).value('.', 'NVARCHAR(MAX)'),
                   1,1,''
                  ),' FROM t_json');

EXECUTE(@query)  

Demo

Json相关问答推荐

使用jolt删除空对象

Python将Pandas转换为嵌套的JSON

在ConvertFrom-Json之后需要从PowerShell对象中获取数据

在Zig中解析JSON失败

JQ:获取该值的较短语法是什么

将部分数据字节解组到自定义 struct 中

jq 对特定键进行过滤并将值整理到单个 csv 单元格中

将 json 转换为 jsonb 安全吗?

在Databricks中如何将JSON文件作为字典读取

使用本地 JSON api react TS Axios

如何加入或合并列表元素列表(未知长度)

Shell脚本空格转义

使用 REACT 从字段值中读取 JSON 元素

将 json 文件转换为 json 对象会打乱对象的顺序

通过sql查询读取嵌套Json

将嵌套的 JSON 对象规范化为 Pandas 数据框

使用 API 搜索维基百科

TypeError: b'1' 不是 JSON 可序列化的

Swift :将 struct 转换为 JSON?

js 中奇怪的 JSON 解析行为,Unexpected token :