SQL - 从单个字段

时间:2015-12-15 17:40:53

标签: sql-server

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

表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

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

1 个答案:

答案 0 :(得分:0)

以下是使用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