문제

누구든지 XML 열이있는 테이블을 사용하여 피벗의 예를 가지고 있는데, 특히 XML 열의 일부 요소를 피벗 테이블의 열로 전환합니까? 나는 하나를 만들려고 노력하고 있지만 구문이 나를 죽이고 있습니다. SQL의 XML은 C#의 XML에 비해 작업하기가 어렵습니다. 나는 이것이 불가능하다고 생각하지만 확인하는 것은 아프지 않을 것입니다 :)

도움이 되었습니까?

해결책

다음은 XML에 저장된 제품 세부 사항이있는 저장소가있는 간단한 예입니다. 피벗은 바닥에 있으며, 이는 카테고리 A와 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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top