📅  最后修改于: 2023-12-03 15:35:05.890000             🧑  作者: Mango
在 SQL 中,有时候我们需要在查询结果中将某一列的多个值以逗号分隔的形式展示出来。本文将介绍如何使用 SQL 实现该功能。
在 MySQL 中,我们可以使用 GROUP_CONCAT
函数将某一列的值以逗号分隔的形式合并起来。
例如,我们有如下的一张表 users
:
| id | name | hobbies | |----|---------|-----------------| | 1 | Alice | reading,running | | 2 | Bob | swimming,dancing | | 3 | Charlie | hiking,reading |
如果我们希望将 hobbies
列的值以逗号分隔的形式展示出来,可以使用如下的 SQL 查询:
SELECT id, name, GROUP_CONCAT(hobbies SEPARATOR ',') AS hobbies_list
FROM users
GROUP BY id, name;
执行上述查询后,我们将得到以下结果:
| id | name | hobbies_list | |----|---------|---------------------| | 1 | Alice | reading,running | | 2 | Bob | swimming,dancing | | 3 | Charlie | hiking,reading |
其中,GROUP_CONCAT(hobbies SEPARATOR ',')
表示将 hobbies
列的值以逗号为分隔符进行合并。
在 SQL Server 2017 及以上版本中,我们可以使用 STRING_AGG
函数将某一列的值以指定的分隔符进行合并。
例如,在 SQL Server 中,我们有如下的一张表 users
:
| id | name | hobbies | |----|---------|-----------------| | 1 | Alice | reading,running | | 2 | Bob | swimming,dancing | | 3 | Charlie | hiking,reading |
如果我们希望将 hobbies
列的值以逗号分隔的形式展示出来,可以使用如下的 SQL 查询:
SELECT id, name, STRING_AGG(hobby, ',') AS hobbies_list
FROM (
SELECT id, name, value AS hobby
FROM users
CROSS APPLY STRING_SPLIT(hobbies, ',')
) t
GROUP BY id, name;
执行上述查询后,我们将得到以下结果:
| id | name | hobbies_list | |----|---------|---------------------| | 1 | Alice | reading,running | | 2 | Bob | swimming,dancing | | 3 | Charlie | hiking,reading |
其中,STRING_SPLIT(hobbies, ',')
表示将 hobbies
列的值按照逗号进行分割,然后使用 CROSS APPLY
将每个分割出来的值与 id
和 name
字段进行关联,最后在外层使用 STRING_AGG
函数将每个分割出来的值以逗号为分隔符进行合并。
通过上述方法,我们可以方便地将 SQL 查询结果中的某一列的多个值以指定的分隔符合并成一个字符串。希望本文能对你有所帮助,谢谢阅读!