sql-server 将数据转换为JSON格式

vwoqyblh  于 2022-10-31  发布在  其他
关注(0)|答案(2)|浏览(234)

我有雇员表。我有下面的字段。少数雇员多个移动的和家庭号码。我希望在JSON格式的数据发送在哪里条件empid。
从dbo.emp中选择雇员标识、雇员姓名、地址和家庭电话号码
这些字段中的值为

homenumber = 1^2^3^4
address = Home1^Home2^Office1^Office2

我希望以上数据在下面的JSON格式的所有这些字段-空身份证,空姓名,地址,家庭号码
我尝试了以下查询,但得到错误输出

select empid, r.value , r1.value from dbo.emp
      cross apply string_split (Homenumber,'^') r
         cross apply string_split (address ,'^') r1 where empid=1

我应该得到以下格式的数据

"Address": [{"Homenumber": 1, "address ":"Home1"},{"Homenumber": 
     2, "address ":"Home2"},{"Homenumber": 3, "address ":"Home3"},
       {"Homenumber": 4, "address ":"Home4"}]

但是自从我做了交叉连接,它得到了更多的记录。如果有人能帮助我,我将是伟大的。

qvk1mo1f

qvk1mo1f1#

不幸的是,STRING_SPLIT目前还没有提供ordinality列,因此您无法在该列上连接两个拆分。
相反,您可以通过创建JSON,然后使用OPENJSON来破解它。
最后,使用FOR JSON将所有内容组合在一起,全部放在一个子查询中

SELECT
  e.empid,
  (
    SELECT
      Homenumber = r1.value,
      address = r2.value
    FROM OPENJSON('["' + REPLACE(STRING_ESCAPE(e.Homenumber, 'json'), '^', '","') + '"]') r1
    JOIN OPENJSON('["' + REPLACE(STRING_ESCAPE(e.address, 'json'), '^', '","') + '"]') r2 ON r2.[key] = r1.[key]
    ORDER BY r1.[key]
    FOR JSON PATH, ROOT('Address')
  )
FROM dbo.emp e
WHERE e.empid = 1;
jecbmhm3

jecbmhm32#

select [data] from [table] for**JSON Auto**

将结果转换为JSON格式

相关问题