Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL Server中聚合JSON?_Sql_Sql Server_Tsql - Fatal编程技术网

如何在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)

我查阅了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       |            |             |
我期待的是:

{
    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;