2011-04-29 72 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

相關問題