【问题标题】:Need help in converting JSON column into SQL table在将 JSON 列转换为 SQL 表时需要帮助
【发布时间】:2021-10-18 02:59:11
【问题描述】:

在将 JSON 列转换为 SQL Server 表时需要帮助。

我有一个存储 JSON 格式值的 SQL Server nvarchar(max) 列,如下所示。

我想把数据转换成表格格式来生成一些报告。

请检查示例数据以及预期结果。

CREATE TABLE ##TempTable
(
    rawdata nvarchar(max)
)

INSERT INTO ##TempTable (rawdata) 
VALUES (
'[
    [
    {"key":"ID","value":"123"},
    {"key":"Name","value":"abc"},
    {"key":"Program","value":"qew"},
    {"key":"Type","value":"tyu"},
    {"key":"Section","value":"dd"},
    {"key":"Director","value":"ghghjg"},
    {"key":"Project","value":"hkhjk"},
    {"key":"Manager","value":"fghfgf"},
    {"key":"PCM","value":"gnhghj"},
    {"key":"Contractor","value":"gghgh"},
    {"key":"Client","value":"gghhg"}
    ],
    [
    {"key":"ID","value":"456"},
    {"key":"Name","value":"yui"},
    {"key":"Program","value":"gdffgf"},
    {"key":"Type","value":"ghgfjhjhj"},
    {"key":"Section","value":"jkjlkll"},
    {"key":"Director","value":"uiop"},
    {"key":"Project","value":"rtyuui"},
    {"key":"Manager","value":"rfv"},
    {"key":"PCM","value":"ujmk"},
    {"key":"Contractor","value":"rfvtg"},
    {"key":"Client","value":"efgg"}
    ]
]'
)

预期结果:

ID Name Program Type Section Director Project Manager PCM Contractor Client
123 abc qew tyu dd ghghjg hkhjk fghfgf gnhghj gghgh gghhg
456 yui gdffgf ghgf jkjlkll uiop rtyuui rfv ujmk rfvtg efgg

提前致谢。

任何帮助将不胜感激。

【问题讨论】:

  • 为什么要使用两个[ ]数组?您尝试过的查询在哪里?你的问题应该很清楚。

标签: sql json tsql sql-server-2008


【解决方案1】:

您有双重嵌套的 JSON 数组。

第一层包含一个完整的键/值对数组,代表最终结果中的一行。我们可以使用OPENJSON 来拆分数组,然后APPLY 将它返回到原来的表中。

第二层有包含列名和值的键/值对。我们需要在另一个 APPLY 中旋转它。

SELECT j2.*
FROM TempTable t
CROSS APPLY OPENJSON(t.rawdata) j1
CROSS APPLY (
    SELECT *
    FROM OPENJSON(j1.value)
      WITH (
        [key] varchar(50),
        value varchar(100)
      ) j2
    PIVOT (
        MAX(value) FOR [key] IN (
          ID,Name,Program,[Type],Section,Director,Project,Manager,PCM,Contractor,Client
        )
    ) pvt
) j2

SQL Fiddle

【讨论】:

  • 感谢@Charlieface :-) 非常感谢。
  • 还有一个请求给你。有没有办法把过程意思颠倒过来,怎么把上面的表格转换成上面的json格式?
  • 这是一个新问题。但粗略的想法是:在APPLY 内将每一行取消旋转为key value 对,并使用FOR JSON PATH 聚合它,然后使用FOR JSON PATH 再次聚合整个事物
猜你喜欢
  • 2018-11-24
  • 1970-01-01
  • 2020-12-25
  • 1970-01-01
  • 1970-01-01
  • 2014-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多