Sag*_*ing 2 sql t-sql sql-server
我查看了 SQL Server 文档,但没有找到类似 JSON 聚合的内容。这是我的表的结构。
| 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 | | |
Run Code Online (Sandbox Code Playgroud)
我期待的是:
{
department_id: 1,
count: 2,
employees: [
{
first_name: 'John',
last_name: 'Doe'
employee_id: 1
},
{
first_name: 'Foo',
last_name: 'Bar',
employee_id: 2
}]
}
Run Code Online (Sandbox Code Playgroud)
从这个查询我能够得到这个结果。
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;
Run Code Online (Sandbox Code Playgroud)
但我想知道有没有更好的方法来聚合 JSON?就像STRING_AGG()?
SELECT
department_id,
COUNT(1) as count,
STRING_AGG(employee_id, ',')
FROM
employees_shifts
GROUP BY
department_id;
Run Code Online (Sandbox Code Playgroud)
你在评论中要求我详细说明......好吧,你自己的代码看起来非常接近你似乎需要的东西。尝试这个:
一个模型表
DECLARE @tbl TABLE(department_id INT,employee_id INT,first_name VARCHAR(100),last_name VARCHAR(100));
INSERT INTO @tbl VALUES
(1,1,'John','Doe')
,(1,2,'Foo','Bar')
,(2,3,'some','more');
Run Code Online (Sandbox Code Playgroud)
--查询
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;
Run Code Online (Sandbox Code Playgroud)
结果
[
{
"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
}
]
}
]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3609 次 |
| 最近记录: |