SQL中的数据透视数据

时间:2017-08-30 14:56:54

标签: sql sql-server pivot

我在下面给出了SalesExVATBranchNoFiscalWeek

每个分支每周只有1条记录:

Select 
        sa.BranchNo
        ,sa.FiscalWeek
        ,sa.SalesExVAT
    From
        dbo.SalesAggregateWeek sa
    Where 
        sa.FiscalYear = 2016

我希望以透视格式

显示

我已尝试过以下内容,

Select 
    MyData.BranchNo

From
    (Select 
        sa.BranchNo
        ,sa.FiscalWeek
        ,sa.SalesExVAT
    From
        dbo.SalesAggregateWeek sa
    Where 
        sa.FiscalYear = 2016) MyData
Pivot
( sum(MyData.salesexvat)
  For 
    MyData.FiscalWeek In (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26
                    ,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52)  )

期望的结果将是FiscalWeek作为顶部的标题,BranchNo显示在左下方,SalesExVAT信息作为数据。

我还欢迎任何关于我必须采取哪些措施来纠正我的代码的建议,因为我还没有使用过PIVOT。

2 个答案:

答案 0 :(得分:2)

最终查询看起来像:

Select *

From 
    (Select 
            sa.BranchNo
            ,sa.FiscalWeek
            ,sa.SalesExVAT
        From
            dbo.SalesAggregateWeek sa
        Where 
            sa.FiscalYear = 2016)  P
Pivot 
        (Sum (SalesExVAT)
        For FiscalWeek In       
        (   [1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],
            [18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28],[29],[30],[31],[32],
            [33],[34],[35],[36],[37],[38],[39],[40],[41],[42],[43],[44],[45],[46],[47],
            [48],[49],[50],[51],[52] )
        ) As pvt    ;

关键点:

财政周刊价值必须全部在[Square Brackets]

Pivot必须使用别名'As pvt'并完成;

如果有人知道我可以写FiscalWeek Between 1 And 52的方式,而不是在几周内说出来,请评论你的答案。

答案 1 :(得分:1)

Here an option using a dynamic cross tab pivot...

application.properties

The print output...

EXPOSE=$port