【问题标题】:Field as Json array字段作为 Json 数组
【发布时间】:2021-04-18 08:31:59
【问题描述】:

我有下面的表格结构,它有一对多的映射

CREATE TABLE #Primary(PrimaryId int,ItemName varchar(10))
CREATE TABLE #Sub1(PrimaryId int,SubId int,SubName1 varchar(10))
CREATE TABLE #Sub2(PrimaryId int,Sub2Id int,SubName2 varchar(10))


INSERT INTO #Primary
VALUES(1,'My Item1'),(2,'My Item2')

INSERT INTO #Sub1 values(1,1,'Sub1'),(1,2,'Sub2')

INSERT INTO #Sub2 values(1,1,'Name1'),(1,2,'Name2')

我正在尝试以此生成低于 Json 的内容

[
  {
    "PrimaryId": 1,
    "ItemName": "My Item1",
    "sb1": [
      {
        "SubId": 1,
        "SubName1": "Sub1"
      },
      {
        "SubId": 2,
        "SubName1": "Sub2"
      }
    ],
    "sb2": [
      {
        "Sub2Id": 1,
        "SubName2": "Name1"
      },
      {
        "Sub2Id": 2,
        "SubName2": "Name2"
      }
    ]
  }
]

到目前为止,我已经在下面尝试过。加入一个表有预期的输出结构,但是当第二个表加入时它变得混乱

select p.PrimaryId,p.ItemName,sb1.SubId,sb1.SubName1,sb2.Sub2Id,sb2.SubName2
from #Primary p
    inner join #Sub1 sb1 on p.PrimaryId = sb1.PrimaryId
    inner join #Sub2 sb2 on p.PrimaryId = sb2.PrimaryId
FOR JSON AUTO

【问题讨论】:

    标签: sql json sql-server tsql sql-server-2016


    【解决方案1】:

    您需要在 SELECT 中使用几个子查询来获得您想要的结果:

    SELECT P.PrimaryID,
           P.ItemName,
           (SELECT S1.SubId,
                   S1.SubName1
            FROM #Sub1 S1
            WHERE S1.PrimaryId = P.PrimaryId
            FOR JSON AUTO) AS sb1,
           (SELECT S2.Sub2Id,
                   S2.SubName2
            FROM #Sub2 S2
            WHERE S2.PrimaryId = P.PrimaryId
            FOR JSON AUTO) AS sb2
    FROM #Primary P
    WHERE P.PrimaryID = 1
    FOR JSON AUTO;
    

    db<>fiddle

    【讨论】:

      猜你喜欢
      • 2016-07-06
      • 1970-01-01
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-08
      • 1970-01-01
      • 2015-07-18
      相关资源
      最近更新 更多