sql-server – SQL – 从单个字段中选择多关键字值

所以我正在构建一个SQL视图,以获取我将用于报告的更可读的数据.我有一个表格,其中包含网站部分内的问题的字段数据(关键字ID). Column3是一个多关键字字段,存储在由chr(185)分隔的DB中.

表格1

    Column1 | Column2 | Column3
       4456 |    2323 | ¹8661¹8662¹

我有第二个表,其中包含关键字ID及其值.

表2

  Column1  | Column2
     4456  |    val1
     2323  |    val2
     8661  |    val3
     8662  |    val4

视图连接表以显示关键字值,但我不确定如何处理多关键字字段(寻找格式化结果,如下所示).

查看表

    Column1 | Column2 | Column3
       val1 |    val2 | val3; val4

我需要某种功能才能实现这一目标还是有另一种方式?

最佳答案
这是使用SQL Server的一些XML特性来实现它的一种方法.使用列和表名使这种难以阅读,这里是一个fiddle

with mapped (c1, c2, val) as ( 
    select t1.column1, t1.column2, t2.column2
    from table1 t1
    cross apply (select convert(xml, '<_' + replace(substring(column3,2,len(column3)-2), '¹', '/><_') + '/>')) s(c)
    cross apply c.nodes('*') x(n)
    join table2 t2 on t2.column1=n.value('fn:substring(local-name(.),2)', 'int'))

select
    column1 = c1.column2,
    column2 = c2.column2,
    column3 = (select val + '; ' from mapped where c1=t1.column1 and c2=t1.column2 for xml path(''))
from table1 t1
join table2 c1 on c1.column1=t1.column1
join table2 c2 on c2.column1=t1.column2

转载注明原文:sql-server – SQL – 从单个字段中选择多关键字值 - 代码日志