如何在映射表中连接每个不同键的值?

时间:2011-04-29 22:12:31

标签: tsql

我正在尝试将映射表压缩为连接的XML字符串。基本上,我想采取这个表:

Old_Key      Old_Value
1            'a'
1            'b'
1            'c'
2            'd'
2            'e'

然后插入它以便将col2中的值转换为Col1中每个值的XML字符串,如下所示:

New_Key New_Value
1       <vals><val>a</val><val>b</val><val>c</val><vals>
2           <vals><val>d</val><val>e</val></vals>

我目前的连接代码是:

INSERT INTO New_Table (New_Key, New_Value)
SELECT DISTINCT(Old_Key), (SELECT Old_Value AS val FROM Old_Table FOR XML PATH(''), ROOT('vals')) FROM Old_Table

此代码不起作用,因为所有Old_Values都连接在一起。如何确保只有共享相同键的Old_Values连接在一起?让我知道我能做些什么来澄清我的情况。谢谢!

1 个答案:

答案 0 :(得分:1)

加入子查询中的外部Old_Table,并使用group by代替distinct

select
  O1.Old_Key,
  (select Old_Value as val
   from Old_Table as O2
   where O1.Old_Key = O2.Old_Key
   for xml path(''), root('vals'), type) as Keys  
from Old_Table as O1
group by O1.Old_Key

结果

Old_Key  Keys
-------  -------------------------------------------------
1        <vals><val>a</val><val>b</val><val>c</val></vals>
2        <vals><val>d</val><val>e</val></vals>