我有 2 张桌子。一张表A(ID,姓名)和表B(位置,人员列表)
人员列表是以下格式的字符串:“ID1,ID2,ID3,ID4”
我想在 sql 查询中得到以下结果: Location , Listofpeoplenames 。即
第1栏 | 第2栏 |
---|---|
地点 | 姓名1,姓名2,姓名3,姓名4 |
在向您展示如何获得您想要的结果之前,我想声明一下,尽管这为您提供了您所问问题的答案,但它不是您需要的答案。在数据中存储分隔结果是一个“非常”坏主意。您需要询问如何实现这一点的事实表明,如果您使用标准化设计,这个问题将很容易解决;这只是一个JOIN
:
SELECT PersonName, LocationName
FROM dbo.Person P
JOIN dbo.Location on P.LocationID = L.LocationID;
不幸的是,如上所述,你的设计很糟糕;花点时间修复它。
使用您目前拥有的数据,为了获得您想要的(非标准化)结果,您需要使用
STRING_SPLIT
对数据进行标准化,然后使用
STRING_AGG
再次对其进行非标准化。幸运的是,两者都可以在完全支持的 SQL Server 版本中使用(您不必声明您没有使用不受支持的版本)。SELECT L.LocationName,
STRING_AGG(P.PersonName) AS People
FROM dbo.Location L
CROSS APPLY STRING_SPLIT(L.People,',') SS
JOIN dbo.People P ON SS.value = P.PersonID
GROUP BY L.LocationName;
不过,我再次建议你修改你的设计。