2008-10-28 5 views
1

Quelqu'un a-t-il un exemple de pivot utilisant une table avec une colonne XML - transformant spécifiquement certains éléments de la colonne xml en une colonne dans le tableau croisé dynamique? J'essaye d'en construire un, mais la syntaxe me tue; xml en sql est sacrément difficile à utiliser, comparé à xml en C#. Je soupçonne que c'est impossible, mais ça ne ferait pas de mal à vérifier :)Pivot SQL utilisant une colonne XML

+0

J'ai obtenu un downvote sur celui-ci et je ne peux pas pour la vie de moi penser pourquoi. – jcollum

Répondre

2

Voici un exemple simple qui a des magasins avec les détails du produit stockés en XML. Le pivot est dans le bas qui montre les magasins et une somme de prix par catégories A et 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 
Questions connexes