2011-04-29 35 views
2

我试图将一个映射表压缩成一个串联的XML字符串。从本质上讲,我想利用这个表:如何连接映射表中每个不同键的值?

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

并插入,这样在COL2值都变成了一个XML字符串在Col1中的每个值,就像这样:

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

加入子查询中的外部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> 
+0

这并获得成功。非常感谢! – JustOnePixel 2011-05-02 16:12:19

相关问题