如何选择列表列表或对象的对象不像表格? (SQL 服务器)

Posted

技术标签:

【中文标题】如何选择列表列表或对象的对象不像表格? (SQL 服务器)【英文标题】:How can I Select list of list or object of object not like a table? (SQL Server) 【发布时间】:2021-12-10 14:59:52 【问题描述】:

我在 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 服务的存储过程

【问题讨论】:

hmm.... 你将不得不在你的问题上付出更多的努力。点网中有完整的模式和框架可以完成大部分工作。 MVC、LINQ、实体框架、序列化只是开始的几个地方。 【参考方案1】:

鉴于此示例数据:

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
  ]

示例db<>fiddle

【讨论】:

以上是关于如何选择列表列表或对象的对象不像表格? (SQL 服务器)的主要内容,如果未能解决你的问题,请参考以下文章

迭代列表对象的行,如何访问整行?

如何使用 HTML 列表框和 SQL 代码显示表格中的某些列?

如何将宽度和高度大小与 Regex 表达式匹配并在 SQL 或 C# 中使用 Sort By 来构建下拉列表?

如何从表格的下拉菜单中删除先前选择的选项?

T-SQL:如何在值列表中选择不在表中的值?

如何在另一个对象列表中选择对象列表