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 :)

È stato utile?

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
scroll top