我有一个表,其中包含唯一标识符列,关系键列和varchar列。
| Id | ForeignId | Fruits |
---------------------------------
| 1 | 1 | Apple |
| 2 | 2 | Apple |
| 3 | 3 | Apple |
| 4 | 4 | Banana |
我想做的是按水果列对数据进行分组,并返回该特定组中所有 ForeignId 键的列表。这样:
| Fruit | ForeignKeys |
---------------------------
| Apple | 1, 2, 3 |
| Banana | 4 |
到目前为止,我有SQL可以得到分组的水果值,因为这微不足道。但是我似乎找不到检索组中包含的 ForeignKeyId 值的好解决方案。
SELECT Fruits FROM FruitTable
我在MySql中找到了GROUP_CONCAT函数,它似乎可以满足我的需要,但在SQL Server 2017中似乎不可用。
任何这方面的帮助将不胜感激。
>如果您使用的是 SQL Server 2014 或更早版本:
SELECT Fruit = Fruits
,ForeignKeys = STUFF(
(SELECT ',' + CAST(ForeignId AS VARCHAR(100))
FROM FruitTable t2
WHERE t1.Fruits = t2.Fruits
FOR XML PATH ('')
)
,1,
1,
''
)
FROM FruitTable t1
GROUP BY Fruits;
如果您使用的是 SQL Server 2016 或更高版本,您还可以编写以下更简单的方法:
SELECT Fruit = Fruits, ForeignKeys = STRING_AGG(ForeignId, ',')
FROM FruitTable
GROUP BY Fruits;
SELECT fruits, foreignkeys = STUFF(
(SELECT ',' + foreignid
FROM fruittable t1
WHERE t1.id = t2.id
FOR XML PATH (''))
, 1, 1, '')
from fruittable
group by fruits
这应该有效。