Pregunta

¿Alguien tiene un ejemplo de un pivote usando una tabla con una columna XML en ella, específicamente convirtiendo algunos de los elementos en la columna xml en una columna en la tabla dinámica? Estoy tratando de construir uno, pero la sintaxis me está matando; Es muy difícil trabajar con xml en sql, en comparación con xml en C #. Sospecho que esto es imposible, pero no estaría de más comprobar :)

¿Fue útil?

Solución

Aquí hay un ejemplo simple que tiene Almacenes con detalles de productos almacenados en xml. El pivote está en la parte inferior, que muestra las tiendas y una suma de precios por categorías A y 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top