我有以下2张表:
Person
------
PersonId int PK
Name varchar
ThingCollectionId int
=======================
PersonId Name ThingCollectionId
1 Joe 100
2 Mary 101
3 Dave 102
Thing
-----
ThingId int PK
ThingCollectionId int
Name varchar
=======================
ThingId ThingCollectionId Name
1 101 Baseball
2 102 Basketball
3 102 Football
Thing
表中的每一行代表一个对象。 对象被分组为集合,由 ThingCollectionId
标识。 每个 Person
都与一个事物集合相关联。
我需要一个查询来聚合与 Person 表中的行关联的集合中所有事物的名称。 请注意,集合中可能有任意数量的事物,从 0 到任何正数。 我想从这个查询中得到的结果如下所示:
PersonId Name Things
1 Joe [NULL]
2 Mary Baseball
3 Dave Basketball,Football
是否可以通过单个查询获得我正在寻找的内容?
我正在使用 SQLServer 2022:
Microsoft SQL Server 2022 (RTM-CU13) (KB5036432) - 16.0.4125.3 (X64)
May 1 2024 15:05:56
Copyright (C) 2022 Microsoft Corporation
Developer Edition (64-bit) on Linux (Ubuntu 22.04.4 LTS) <X64>
是的,这是可能的。您可以使用 string_agg ,它是 sqlservers 上的 listagg
SELECT p.personid, p.name
, string_agg(t.name, '')
FROM person p
JOIN thing t
USING (thingcollectionid)
GROUP BY p.personid, p.name
未经测试,但应该相当接近