选择将转换列转换为csv

时间:2011-11-04 12:19:34

标签: sql

我有两张桌子

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

但是无法得到这样的结果。

感谢您的帮助

1 个答案:

答案 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

在此处试试:http://data.stackexchange.com/stackoverflow/q/116544/