本文介紹了在SQL Server中將行轉(zhuǎn)換為XML格式的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我有如下要求。
上圖的DDL和DML腳本為
CREATE TABLE #example
([CCP_DETAILS_SID] int, [ACCOUNT_GROWTH] int, [PRODUCT_GROWTH] int, [PROJECTION_SALES] numeric(22,6), [PROJECTION_UNITS] numeric(22,6), [PERIOD_SID] int)
;
INSERT INTO #example
([CCP_DETAILS_SID], [ACCOUNT_GROWTH], [PRODUCT_GROWTH], [PROJECTION_SALES], [PROJECTION_UNITS], [PERIOD_SID])
VALUES
(30001, 0, 0, 1505384.695, 18487.25251, 1801),
(30001, 0, 0, 1552809.983, 18695.75536, 1802),
(30001, 0, 0, 1595642.121, 18834.75725, 1803),
(30002, 0, 0, 10000.32, 18834.75725, 1801),
(30002, 0, 0, 1659124.98, 18834.75725, 1802),
(30002, 0, 0, 465859546.6, 18834.75725, 1803)
;
我必須將上面的結(jié)果轉(zhuǎn)換為如下所示的XML格式(輸出)。
ccp_details_sid xml_format_string
30001 <period>
<period_sid period_sid=1801>
<PROJECTION_SALES>1505384.695</PROJECTION_SALES>
<PROJECTION_UNITS>18487.25251<PROJECTION_UNITS>
<ACCOUNT_GROWTH>0</ACCOUNT_GROWTH>
<PRODUCT_GROWTH>0</PRODUCT_GROWTH>
</period_sid>
<period_sid period_sid=1802>
<PROJECTION_SALES>1552809.983</PROJECTION_SALES>
<PROJECTION_UNITS>18695.75536<PROJECTION_UNITS>
<ACCOUNT_GROWTH>0</ACCOUNT_GROWTH>
<PRODUCT_GROWTH>0</PRODUCT_GROWTH>
</period_sid>
<period_sid period_sid=1802>
<PROJECTION_SALES>1595642.121</PROJECTION_SALES>
<PROJECTION_UNITS>18834.75725<PROJECTION_UNITS>
<ACCOUNT_GROWTH>0</ACCOUNT_GROWTH>
<PRODUCT_GROWTH>0</PRODUCT_GROWTH>
</period_sid>
</period>
30002 Same like above
我是XML
的新手,因此無法快速完成。我已將Marc_s解決方案與cross apply
一起使用,但無法實現(xiàn)。
注意:我的主要目標(biāo)是,在上圖中,如果我們看到單個ccp_Detailssid有三條記錄,那么我想使用XML
(上面提到的)將其轉(zhuǎn)換為一行。
推薦答案
以下內(nèi)容適用于您:
SELECT t.CCP_DETAILS_SID,
( SELECT PERIOD_SID AS [@period_sid],
x.PROJECTION_SALES,
x.PROJECTION_UNITS,
x.ACCOUNT_GROWTH,
x.PRODUCT_GROWTH
FROM #Example AS x
WHERE x.CCP_DETAILS_SID = t.CCP_DETAILS_SID
FOR XML PATH('period_sid'), TYPE, ROOT('period')
) AS xml_format_string
FROM #Example AS t
GROUP BY t.CCP_DETAILS_SID;
它實質(zhì)上使用以下命令獲取CCP_DETAILS_SID
的所有唯一值:
SELECT t.CCP_DETAILS_SID
FROM #Example AS t
GROUP BY t.CCP_DETAILS_SID;
然后,對于這些值中的每個值,使用相關(guān)的子查詢來形成XML。要點(diǎn)是:
在別名前使用@
創(chuàng)建屬性,例如AS [@period_sid]
使用PATH('period_sid')
為每行的容器命名
使用ROOT('period')
命名外部節(jié)點(diǎn)。
Example on DBFiddle
這篇關(guān)于在SQL Server中將行轉(zhuǎn)換為XML格式的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,