我有两张桌子
tbl_Products
ID Keywords
1 1,2
2 1,3
3 2,3
和
tbl_Keywords
Key_ID Keyword
1 Keyword1
2 Keyword2
3 Keyword3
我需要结果如下
Result
ID Keywords keywordCSV
1 1,2 Keyword1,Keyword2
2 1,3 Keyword1,Keyword3
3 2 Keyword2
此处tbl_Products中的关键字的数据类型为varchar,Key_ID的数据类型为bigint。
我尝试将列转换为CSV来自参考Here
但是无法得到这样的结果。
感谢您的帮助
答案 0 :(得分:3)
declare @tbl_Products table(ID int, Keywords varchar(10))
insert into @tbl_Products values
(1, '1,2'),
(2, '1,3'),
(3, '2,3')
declare @tbl_Keywords table(Key_ID int, Keyword varchar(10))
insert into @tbl_Keywords values
(1, 'Keyword1'),
(2, 'Keyword2'),
(3, 'Keyword3')
select P.ID,
P.Keywords,
stuff((select ', '+K.keyword
from @tbl_Keywords as K
inner join P.XKeywords.nodes('/k') as KX(N)
on KX.N.value('.', 'int') = K.Key_ID
for xml path(''), type).value('.', 'varchar(max)'), 1, 2, '') as keywordCSV
from (
select ID,
Keywords,
cast('<k>'+replace(Keywords, ',', '</k><k>')+'</k>' as xml) as XKeywords
from @tbl_Products
) as P