我正在尝试将映射表压缩为连接的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连接在一起?让我知道我能做些什么来澄清我的情况。谢谢!
答案 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>