当我有逗号分隔字符串 SQL 时返回逗号分隔值

问题描述 投票:0回答:1

我有 2 张桌子。一张表A(ID,姓名)和表B(位置,人员列表)

人员列表是以下格式的字符串:“ID1,ID2,ID3,ID4”

我想在 sql 查询中得到以下结果: Location , Listofpeoplenames 。即

第1栏 第2栏
地点 姓名1,姓名2,姓名3,姓名4
sql sql-server
1个回答
0
投票

在向您展示如何获得您想要的结果之前,我想声明一下,尽管这为您提供了您所问问题的答案,但它不是需要的答案。在数据中存储分隔结果是一个“非常”坏主意。您需要询问如何实现这一点的事实表明,如果您使用标准化设计,这个问题将很容易解决;这只是一个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;

不过,我再次建议你修改你的设计。

© www.soinside.com 2019 - 2024. All rights reserved.