如何在SQL Server中聚合JSON?
我查阅了SQL Server文档,但没有找到类似JSON聚合的内容。这是我桌子的结构如何在SQL Server中聚合JSON?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我查阅了SQL Server文档,但没有找到类似JSON聚合的内容。这是我桌子的结构 | Column Name | Type | Nullable | Properties | Description | | ------------------- | ------------------ | -------- | ---------- | ----------- | | employee_id | INT(4)
| Column Name | Type | Nullable | Properties | Description |
| ------------------- | ------------------ | -------- | ---------- | ----------- |
| employee_id | INT(4) | NO | | |
| first_name | NVARCHAR(100) | NO | | |
| last_name | NVARCHAR(100) | NO | | |
| department_id | INT(4) | NO | | |
| date | DATETIMEOFFSET(10) | NO | | |
我期待的是:
{
department_id: 1,
count: 2,
employees: [
{
first_name: 'John',
last_name: 'Doe'
employee_id: 1
},
{
first_name: 'Foo',
last_name: 'Bar',
employee_id: 2
}]
}
从这个查询中,我能够得到这个结果
SELECT
ves.department_id,
COUNT(1) AS count,
(SELECT
a.first_name,
a.last_name,
a.employee_id
FROM
employee_departments a
WHERE
a.department_id = ves.department_id
FOR JSON AUTO) AS employees
FROM
employee_departments ves
GROUP BY
ves.department_id;
但我想知道有没有更好的方法来聚合JSON?就像弦乐一样
你在评论中要求我详细说明。。。 嗯,您自己的代码看起来非常接近您所需要的。 试试这个: 模型桌子 -询问
SELECT
ves.department_id,
COUNT(1) AS count,
(SELECT
a.first_name,
a.last_name,
a.employee_id
FROM
@tbl a
WHERE
a.department_id = ves.department_id
FOR JSON PATH) AS employees
FROM
@tbl ves
GROUP BY
ves.department_id
FOR JSON PATH;
结果
[
{
"department_id": 1,
"count": 2,
"employees": [
{
"first_name": "John",
"last_name": "Doe",
"employee_id": 1
},
{
"first_name": "Foo",
"last_name": "Bar",
"employee_id": 2
}
]
},
{
"department_id": 2,
"count": 1,
"employees": [
{
"first_name": "some",
"last_name": "more",
"employee_id": 3
}
]
}
]
你在评论中要求我详细说明。。。 嗯,您自己的代码看起来非常接近您所需要的。 试试这个: 模型桌子 -询问
SELECT
ves.department_id,
COUNT(1) AS count,
(SELECT
a.first_name,
a.last_name,
a.employee_id
FROM
@tbl a
WHERE
a.department_id = ves.department_id
FOR JSON PATH) AS employees
FROM
@tbl ves
GROUP BY
ves.department_id
FOR JSON PATH;
结果
[
{
"department_id": 1,
"count": 2,
"employees": [
{
"first_name": "John",
"last_name": "Doe",
"employee_id": 1
},
{
"first_name": "Foo",
"last_name": "Bar",
"employee_id": 2
}
]
},
{
"department_id": 2,
"count": 1,
"employees": [
{
"first_name": "some",
"last_name": "more",
"employee_id": 3
}
]
}
]
我做了一些研究,发现了几个将关系数据转换为JSON的示例。使用FOR JSON AUTO实现此结果的另一种方法是: 有关更多详细信息,请查看下面的链接
我做了一些研究,发现了几个将关系数据转换为JSON的示例。使用FOR JSON AUTO实现此结果的另一种方法是: 有关更多详细信息,请查看下面的链接
我不知道。您可以将相关子查询移动到交叉应用,但我认为这不会改变任何事情。不,使用相关子查询的这种方法是解决嵌套JSON问题的正确方法,与嵌套XML相同。无论如何,当涉及到需要转义的字符(例如JSON中的引号)时,使用字符串方法可能会带来麻烦。谈到如何做,我建议将您的数据分离到一个标准化的n:m结构部门、员工和中间的映射表。它已经标准化了,我有单独的部门、员工表。这是我质疑的观点。你能详细解释一下吗?我不知道。您可以将相关子查询移动到交叉应用,但我认为这不会改变任何事情。不,使用相关子查询的这种方法是解决嵌套JSON问题的正确方法,与嵌套XML相同。无论如何,当涉及到需要转义的字符(例如JSON中的引号)时,使用字符串方法可能会带来麻烦。谈到如何做,我建议将您的数据分离到一个标准化的n:m结构部门、员工和中间的映射表。它已经标准化了,我有单独的部门、员工表。这是我质疑的观点。“你能详细说明一下吗?这没什么用。”萨加姆林现在该你详细说明了。什么是没有帮助的?没有帮助。@SagarChamling现在由你来详细说明。什么是没有帮助的?
SELECT DISTINCT
ed.department_id,
employees.id,
employees.first_name,
employees.last_name
FROM
employees_departments ed
INNER JOIN
employees_departments employees
ON
ed.department_id = employees.department_id
ORDER BY ed.department_id, employees.id
FOR JSON AUTO;