SQL Server:使用分组查询列到 JSON 对象

作者:编程家 分类: sqlserver 时间:2025-09-14

SQL Server:使用分组查询列到 JSON 对象

在SQL Server中,我们经常需要将查询结果以JSON对象的形式返回给应用程序。这种需求在Web开发中尤为常见,因为JSON是一种轻量级的数据交换格式,易于解析和处理。在本文中,我们将学习如何使用分组查询将列转换为JSON对象,并通过案例代码进行演示。

什么是分组查询?

在SQL中,分组查询用于将数据按照指定的列进行分组,并对每个分组应用聚合函数。聚合函数是对一组值进行计算并返回单个值的函数。常见的聚合函数包括SUM、COUNT、MAX、MIN等。

将查询结果转换为JSON对象

在SQL Server 2016及以上版本中,我们可以使用FOR JSON子句将查询结果直接转换为JSON格式。FOR JSON子句允许我们指定转换规则以及输出格式。

例如,假设我们有一个名为"Orders"的表,其中包含订单的信息,包括订单ID、客户ID、订单日期和订单金额。我们想要按照客户ID将订单金额进行分组,并将结果转换为JSON对象。我们可以使用以下查询:

SELECT CustomerID, SUM(OrderAmount) AS TotalAmount

FROM Orders

GROUP BY CustomerID

FOR JSON AUTO;

这将返回一个包含每个客户ID和对应总订单金额的JSON对象。

案例演示

让我们通过一个具体的案例来演示如何使用分组查询将列转换为JSON对象。

假设我们有一个名为"Products"的表,其中包含产品的信息,包括产品ID、产品名称和产品价格。我们想要按照价格范围将产品进行分组,并将结果转换为JSON对象。

首先,我们需要创建一个名为"Products"的表,并插入一些示例数据:

sql

CREATE TABLE Products (

ProductID INT,

ProductName VARCHAR(50),

Price DECIMAL(10,2)

);

INSERT INTO Products (ProductID, ProductName, Price)

VALUES (1, 'Product A', 10.00),

(2, 'Product B', 20.00),

(3, 'Product C', 30.00),

(4, 'Product D', 40.00),

(5, 'Product E', 50.00);

接下来,我们可以使用以下查询将产品按照价格范围进行分组,并将结果转换为JSON对象:

sql

SELECT CASE

WHEN Price <= 20 THEN 'Cheap'

WHEN Price <= 40 THEN 'Moderate'

ELSE 'Expensive'

END AS PriceRange,

COUNT(*) AS TotalProducts

FROM Products

GROUP BY CASE

WHEN Price <= 20 THEN 'Cheap'

WHEN Price <= 40 THEN 'Moderate'

ELSE 'Expensive'

END

FOR JSON AUTO;

这将返回一个包含每个价格范围和对应产品总数的JSON对象。

使用分组查询将列转换为JSON对象是在SQL Server中处理查询结果的一种常见方法。通过将查询结果转换为JSON格式,我们可以更方便地将数据传递给应用程序,并进行解析和处理。在本文中,我们学习了如何使用分组查询和FOR JSON子句将列转换为JSON对象,并通过案例代码进行了演示。希望这对你在SQL Server开发中有所帮助。

参考代码

sql

-- 创建表和插入示例数据

CREATE TABLE Products (

ProductID INT,

ProductName VARCHAR(50),

Price DECIMAL(10,2)

);

INSERT INTO Products (ProductID, ProductName, Price)

VALUES (1, 'Product A', 10.00),

(2, 'Product B', 20.00),

(3, 'Product C', 30.00),

(4, 'Product D', 40.00),

(5, 'Product E', 50.00);

-- 将产品按照价格范围进行分组并转换为JSON对象

SELECT CASE

WHEN Price <= 20 THEN 'Cheap'

WHEN Price <= 40 THEN 'Moderate'

ELSE 'Expensive'

END AS PriceRange,

COUNT(*) AS TotalProducts

FROM Products

GROUP BY CASE

WHEN Price <= 20 THEN 'Cheap'

WHEN Price <= 40 THEN 'Moderate'

ELSE 'Expensive'

END

FOR JSON AUTO;

相关链接:

- [SQL Server官方文档](https://docs.microsoft.com/zh-cn/sql/sql-server/)

- [SQL Server:使用FOR JSON子句将查询结果转换为JSON](https://docs.microsoft.com/zh-cn/sql/relational-databases/json/format-query-results-as-json-with-for-json-sql-server?view=sql-server-ver15)