按照下一方法: -
1)通過使用CROSS APPLY
打開一個逗號分隔字符串轉換成各行與XML
2)左連接加入兩個表。
3)經由使用STUFF
& FOR XML
4)使用用於去除逗號替換功能連接具有相同的id許多行。
演示: -
declare @MyTable table (id int , Tbl1Col varchar(10))
insert into @MyTable values (1,'2'),(2,'2,4'),(3,''),(4,'6'),(5,'3')
declare @MyTable2 table (id int , Tbl2Col varchar(10))
insert into @MyTable2 values (1,'E'),(2,'F'),(3,'M'),(4,'U'),(5,'P'),(6,'C'),(7,'N'),(8,'G')
select a.id , Tbl2Col
into #TestTable
from
(
SELECT A.id,
Split.a.value('.', 'VARCHAR(100)') AS Tbl1Col
FROM
(
SELECT id,
CAST ('<M>' + REPLACE(Tbl1Col, ',', '</M><M>') + '</M>' AS XML) AS Data
FROM @MyTable
) AS A CROSS APPLY Data.nodes ('/M') AS Split(a)) a
left join @MyTable2 b
on a.Tbl1Col = b.id
order by a.id
SELECT id, Tbl2Col =
Replace(STUFF((SELECT DISTINCT ', ' + Tbl2Col
FROM #TestTable b
WHERE b.id = a.id
FOR XML PATH('')), 1, 2, ''),',','')
FROM #TestTable a
GROUP BY id
輸出: -
1 F
2 F U
3 NULL
4 C
5 M
參考: -
Turning a Comma Separated string into individual rows
How to concatenate many rows with same id in sql?
最後: -
不要使用這種方法,而你的正常化,而不是數據庫,只是把它當作好玩/培訓/試圖....等代碼。
您需要一個ON子句,放置連接條件。 – jarlh
您不應該**將逗號分隔值存儲在數據庫中 –
也應該添加預期結果。 (格式化文本也在這裏。) – jarlh