代码之家  ›  专栏  ›  技术社区  ›  jcollum

使用XML列的SQL透视

  •  1
  • jcollum  · 技术社区  · 16 年前

    有没有人有一个使用包含XML列的表的透视的例子——特别是将XML列中的一些元素转换为透视表中的一列?我正在尝试构建一个,但是语法让我很难受;与C_中的XML相比,SQL中的XML非常难使用。我怀疑这是不可能的,但检查一下不会有什么坏处。

    1 回复  |  直到 16 年前
        1
  •  2
  •   John Lemp Chris Heald    16 年前

    下面是一个简单的示例,其中存储了以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