首页 > 解决方案 > 如何选择列表列表或对象的对象不像表格?(SQL 服务器)

问题描述

我在 SQL Server 中有一个问题:我想要选择列表列表或对象的对象而不是表。

例子 :

SELECT p.Name, List (J.Name), .... 
FROM dbo.Person AS p
INNER JOIN dbo.Jobs AS j ON j.PersonId = p.id
GROUP BY p.name

像一个 json 例子:

{
   Name : "test"
   Jobs : [
   {
       Name : "Job",
       Position : 2
   },{    
       Name : "Job1",
       Position : 1
   }]
}

对我来说这个问题有解决方案吗?

我想输出一个可用于 Web 服务的存储过程

标签: c#sqlsql-server

解决方案


鉴于此示例数据:

CREATE TABLE dbo.Person(Id int, Name nvarchar(32));
INSERT dbo.Person VALUES(1, N'test');

CREATE TABLE dbo.Jobs(Id int, Name nvarchar(32), PersonId int, Position int);
INSERT dbo.Jobs VALUES(1, N'Job', 1, 2),(1, N'Job1',1,1);

您可以申请FOR JSON AUTO加入以获得您想要的结果(好吧,关闭):

SELECT p.Name, jobs.Name, jobs.Position
  FROM dbo.Person AS p
  INNER JOIN dbo.Jobs AS jobs 
    ON jobs.PersonId = p.id
  FOR JSON AUTO, WITHOUT_ARRAY_WRAPPER;

输出(空白矿):

{
  "Name":"test",
  "jobs":[
  {
    "Name":"Job",
    "Position":2
  },{
    "Name":"Job1",
    "Position":1
  }]
}

推荐阅读