本文介紹了在SQL Server中將行轉(zhuǎn)換為XML格式的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問(wèn)題描述
我有如下要求。
上圖的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
的新手,因此無(wú)法快速完成。我已將Marc_s解決方案與cross apply
一起使用,但無(wú)法實(shí)現(xiàn)。
注意:我的主要目標(biāo)是,在上圖中,如果我們看到單個(gè)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;
它實(shí)質(zhì)上使用以下命令獲取CCP_DETAILS_SID
的所有唯一值:
SELECT t.CCP_DETAILS_SID
FROM #Example AS t
GROUP BY t.CCP_DETAILS_SID;
然后,對(duì)于這些值中的每個(gè)值,使用相關(guān)的子查詢來(lái)形成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格式的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,