SQL 合并行值 T-SQL

SQL 合并行值 T-SQL

在本文中,我们将介绍如何使用 T-SQL 合并行值。在实际的数据库操作中,有时候我们需要将多行的值合并成一行,从而便于查询和分析数据。

阅读更多:SQL 教程

使用 FOR XML PATH 实现行值合并

T-SQL 提供了 FOR XML PATH 语句,可以将多行的值合并成一行,并且可以指定分隔符。下面是一个示例:

-- 创建一个临时表
CREATE TABLE #Temp (
    Name VARCHAR(50)
)

-- 插入测试数据
INSERT INTO #Temp (Name)
VALUES ('Tom'), ('Jerry'), ('Mike'), ('Alice'), ('Bob')

-- 使用 FOR XML PATH 合并行值,并以逗号作为分隔符
SELECT STUFF((
    SELECT ',' + Name
    FROM #Temp
    FOR XML PATH('')
), 1, 1, '') AS ConcatenatedNames

-- 删除临时表
DROP TABLE #Temp

运行以上代码,将会得到如下结果:

ConcatenatedNames
-----------------
Tom,Jerry,Mike,Alice,Bob

在上面的示例中,我们首先创建了一个临时表 #Temp,并插入了一些测试数据。然后使用 SELECT 语句和 FOR XML PATH 子句,将 #Temp 表中的 Name 列值合并成一行,并以逗号作为分隔符。最后使用 STUFF 函数将结果中的首个逗号移除,得到最终的合并结果。

使用 STRING_AGG 函数实现行值合并

SQL Server 2017 及以上版本提供了 STRING_AGG 函数,可以更简单地实现行值合并。下面是一个示例:

-- 创建一个临时表
CREATE TABLE #Temp (
    Name VARCHAR(50)
)

-- 插入测试数据
INSERT INTO #Temp (Name)
VALUES ('Tom'), ('Jerry'), ('Mike'), ('Alice'), ('Bob')

-- 使用 STRING_AGG 函数合并行值,并以逗号作为分隔符
SELECT STRING_AGG(Name, ',') AS ConcatenatedNames
FROM #Temp

-- 删除临时表
DROP TABLE #Temp

运行以上代码,将会得到与上面相同的结果:

ConcatenatedNames
-----------------
Tom,Jerry,Mike,Alice,Bob

在上面的示例中,我们使用 STRING_AGG 函数将 #Temp 表中的 Name 列值合并成一行,并以逗号作为分隔符。需要注意的是,STRING_AGG 函数只能在 SQL Server 2017 及以上版本中使用。

使用 COALESCE 函数实现行值合并

除了上述的方法,我们还可以使用 COALESCE 函数实现行值合并。COALESCE 函数用于返回参数列表中第一个非空的表达式的值。下面是一个示例:

-- 创建一个临时表
CREATE TABLE #Temp (
    Name VARCHAR(50)
)

-- 插入测试数据
INSERT INTO #Temp (Name)
VALUES ('Tom'), ('Jerry'), ('Mike'), ('Alice'), ('Bob')

-- 使用 COALESCE 函数合并行值,并以逗号作为分隔符
DECLARE @ConcatenatedNames VARCHAR(MAX)

SELECT @ConcatenatedNames = COALESCE(@ConcatenatedNames + ',', '') + Name
FROM #Temp

SELECT @ConcatenatedNames AS ConcatenatedNames

-- 删除临时表
DROP TABLE #Temp

运行以上代码,将会得到与前面相同的结果:

ConcatenatedNames
-----------------
Tom,Jerry,Mike,Alice,Bob

在上面的示例中,我们首先使用 DECLARE 语句定义一个变量 @ConcatenatedNames,并将其初始化为空字符串。然后使用 SELECT 语句和 COALESCE 函数将 #Temp 表中的 Name 列值合并成一行,并以逗号作为分隔符,每次迭代都将合并结果赋给 @ConcatenatedNames 变量。最后输出 @ConcatenatedNames 变量的值,即得到最终的合并结果。

总结

通过本文,我们学习了如何使用 T-SQL 合并行值。我们介绍了使用 FOR XML PATH、STRING_AGG 和 COALESCE 函数的示例,并分别展示了结果。根据实际情况,可以选择最适合的方法来实现行值合并,从而提高查询和分析数据的效率。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程