SQL 内连接和分组依据以获取逗号分隔值
Posted
技术标签:
【中文标题】SQL 内连接和分组依据以获取逗号分隔值【英文标题】:SQL inner join and group by to get comma separated values 【发布时间】:2020-03-24 20:15:06 【问题描述】:我有以下三个表格,我想从中得到一个具体的结果
表A
key1 key2
-------------
121 4
131 4
141 5
151 3
161 3
171 6
181 6
191 6
... ...
表B:
key1 key3
-------------
121 1001
131 1111
141 1111
151 1222
161 1222
171 1234
181 1001
191 1111
... ...
表C:
key3 key4
-------------
1001 "aa"
1111 "gg"
1222 "hh"
1234 "jj"
... ...
我想要一个 SQL 查询(可以使用内连接)给我以下结果:
key2 key4
-------------------------
3 "hh"
4 "aa", "gg"
5 "gg"
6 "aa", "gg", "jj"
微软 SQL Server 2012
【问题讨论】:
【参考方案1】:你可以使用string_agg()
:
select t1.key2, string_agg(t3.key4, ',') key4
from table1 t1
inner join table2 t2 on t2.key1 = t1.key1
inner join table3 t3 on t3.key3 = t1.key3
group by t1.key2
【讨论】:
错误 - 'string_agg' 不是可识别的内置函数名称 @vjjj:你确定你是在 Posgres 数据库上运行这个吗? 它的 SQL 服务器,会改变标签,我的错! @vjjj:字符串聚合函数是特定于供应商的...... SQL Server 的哪个版本? 2017 年有string_agg()
。
Microsoft SQL Server 2012【参考方案2】:
请尝试以下 SQL 查询:
SELECT key2, string_agg(key4, ",")
FROM TableA JOIN TableB USING (key1) JOIN TableC USING (key3)
GROUP BY key2
【讨论】:
以上是关于SQL 内连接和分组依据以获取逗号分隔值的主要内容,如果未能解决你的问题,请参考以下文章
在 2 个表之间使用内连接,对于 1 个特定列的多条记录,对整数列求和,使 varchar 列以逗号分隔