Pivot SQL utilizzando una colonna XML
-
04-07-2019 - |
Domanda
Qualcuno ha un esempio di un pivot che utilizza una tabella con una colonna XML al suo interno, trasformando in modo specifico alcuni degli elementi della colonna xml in una colonna della tabella pivot? Sto cercando di costruirne uno, ma la sintassi mi sta uccidendo; xml in sql è dannatamente difficile da lavorare, rispetto a xml in C #. Sospetto che sia impossibile, ma non farebbe male controllare :)
Soluzione
Ecco un semplice esempio che ha negozi con dettagli del prodotto memorizzati in XML. Il perno è nella parte inferiore che mostra i negozi e una somma di prezzo per le categorie A e B.
declare @test Table
(
StoreID int,
ProdXml xml
)
insert into @test
select 1, '<product cat="A" name="foo" price="10" />' union
select 2, '<product cat="A" name="bar" price="12" />' union
select 1, '<product cat="B" name="blah" price="35" />' union
select 2, '<product cat="B" name="bap" price="67" />' union
select 1, '<product cat="C" name="bip" price="18" />' union
select 2, '<product cat="A" name="bing" price="88" />' union
select 1, '<product cat="B" name="bang" price="34" />' union
select 2, '<product cat="B" name="boom" price="65" />'
--Pivot showing sum of price by Cat
select StoreID, A, B
from
(
select StoreID,
ProdXml.value('/product[1]/@cat[1]','varchar(20)') as [ProdCat],
ProdXml.value('/product[1]/@price[1]','int') as [ProdPrice]
from
@test
) up
PIVOT (SUM([ProdPrice]) FOR [ProdCat] IN ( A, B)) as pvt
ORDER BY StoreID
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow