IF OBJECT_ID('Tempdb..#Temp')IS NOT NULL
Drop table #Temp
;With View1(NameID,Name)
AS
(
SELECT 1,'A' UNION ALL
SELECT 2,'B' UNION ALL
SELECT 3,'C' UNION ALL
SELECT 4,'D'
)
,View2(SoftwareID,NameID)
AS
(
SELECT 1,1UNion all
SELECT 2,1UNion all
SELECT 3,1UNion all
SELECT 4,3UNion all
SELECT 5,3UNion all
SELECT 6,2UNion all
SELECT 7,2
)
,Final
AS
(
SELECT v1.NameID,v2.SoftwareID from View1 v1
LEFT join View2 v2
On v1.NameID=v2.NameID
)
SELECT DISTINCT o.NameID,STUFF((SELECT DISTINCT ','+CAST(i.SoftwareID AS VARCHAR(5))
From Final i WHERE i.NameID=o.NameID FOR XML PATH ('')),1,1,'') AS SoftwareID
FROM Final o
输出
NameID SoftwareID
-------------------
1 1,2,3
2 6,7
3 4,5
4 NULL