【问题标题】:How to convert Row to Column如何将行转换为列
【发布时间】:2016-10-25 23:33:14
【问题描述】:

我有一个 tablix,其中包含水平排列的 Type、Default、Break、CRG、Meeting、Training、Specialist、Personal、SpecialProjects 和 SystemOutage。我需要把它放在饼图中,每个图表都按类别通过数据集进行过滤。我遇到的问题是 Default、Break、CRG、Meeting、Training、Specialist、Personal、SpecialProjects 和 SystemOutage 是水平布局的,我需要它是垂直的。我尝试了 Unpivot,但无法使用 9 个字段。见下文。

我需要饼图的预期结果:

【问题讨论】:

    标签: tsql ssrs-2008-r2


    【解决方案1】:

    也许这就是你要找的东西

    Declare @YourTable table (Type varchar(50),[Default] int,[Break] int,CRG int,Meeting int,Training int,Specialist int,Personal int,SpecialProjects int,SystemOutage int)
    Insert into @YourTable values
    ('Category1',32721,40634,0,1348,9162,0,10212,44549,17090),
    ('Category2',261997,83567,0,0,552312,0,17859,59345,30138)
    
    Select B.*
     From  (Select Type,XMLData=cast((Select A.* for XML Raw) as xml) From @YourTable A) A
     Cross Apply (
                    Select Type   = r.value('@Type','varchar(50)')
                          ,Item   = attr.value('local-name(.)','varchar(100)')
                          ,Value  = attr.value('.','int') 
                     From  XMLData.nodes('/row') as A(r)
                     Cross Apply A.r.nodes('./@*') AS B(attr)
                     Where attr.value('local-name(.)','varchar(100)') not in ('Type')
                 ) B
     Where A.Type='Category1'
    

    退货

    【讨论】:

    • 谢谢约翰。我重新评估了我的代码并添加了 UNPIVOT 并且它有效。
    • @Arsee 本机 UNPIVOT 或此解决方案。如果是原生的,它会更快,它只需要你定义字段。我将这种技术用于更动态的方法。如果没有别的,把这个答案放在你的口袋里,我会从中得到很多用处(作为一个懒惰、懒惰的编码器)。 :)
    猜你喜欢
    • 2013-06-12
    • 2011-12-21
    • 2014-08-30
    • 2016-10-25
    相关资源
    最近更新 更多