次のアプローチは、次のとおりです - XML
2とCROSS APPLY
を用い介して、個々の行にカンマ区切り文字列を参照する)
1)参加左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