【问题标题】:SQL - Total Pivot ColumnSQL - 总透视列
【发布时间】:2014-08-13 18:36:25
【问题描述】:

对于下面的 sql 脚本,我想在末尾添加一个“Total”列来对每一行的列中的数据求和。

请帮忙:

select * from 
(SELECT       Calender.YrPer, [Period DATA 6b].PRODUCT_NO, isnull(sum([Period DATA 6b].LI_QTY+[Period DATA 6b].RG_QTY*1.0),0) as "TotalUnits"
FROM            Calender INNER JOIN
                         [Period DATA 6b] ON Calender.[Starting Period] = [Period DATA 6b].STARTING_PERIOD LEFT OUTER JOIN
                         Allproducts ON [Period DATA 6b].PRODUCT_NO = Allproducts.PRODUCT_NO
where Calender.YrPer >= '2012P05'
group by Calender.YrPer, [Period DATA 6b].PRODUCT_NO)

as test1
pivot
(
sum(TotalUnits)
for YrPer
in ([2012P05],[2012P06],[2012P07],[2012P08],[2012P09],[2012P10],[2012P11],[2012P12],[2012P13],[2013P01],[2013P02],[2013P03],[2013P04],[2013P05],[2013P06],[2013P07],[2013P08],[2013P09],[2013P10],[2013P11],[2013P12],[2013P13],[2014P01],[2014P02],[2014P03],[2014P04])
)
PivotTable
order by PRODUCT_NO

样本期望输出:

PRODUCT_NO  2012P05 2012P06 2012P07 2012P08 2012P09 2012P10 2012P11 2012P12 2012P13     2013P01 2013P02 2013P03 2013P04 2013P05 2013P06 2013P07 2013P08 2013P09 2013P10 2013P11     2013P12 2013P13 2014P01 2014P02 2014P03 2014P04 2013 R52    2014 R52
75  551 506 473 261 557 1037    285 250 278 234 NULL    NULL    NULL    NULL    NULL        NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL        4432    0
174 NULL    NULL    NULL    NULL    1   NULL    NULL    NULL    NULL    NULL    NULL        NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL        NULL    NULL    NULL    NULL    1   0
216 NULL    NULL    0   0   0   0   NULL    NULL    NULL    NULL    NULL    NULL        NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL        NULL    NULL    NULL    0   0

【问题讨论】:

  • 这是报告吗?您可以更轻松地使用您正在使用的任何东西来提供此报告(SSRS?)以包含一个总和列
  • 这是 sql server 2014。我只是使用 sql 创建数据透视表报告,但需要使用 sql 的总列。
  • @Ben 您可以在对数据进行分区的子查询中使用sum() over(),但如果您在表中添加一小组样本数据,这会更容易提供帮助。 Similar to this answer

标签: sql sql-server pivot


【解决方案1】:

使用您的代码,添加联合加查询以仅按 PRODUCT_NO 获得总组。 YrPer 设置为常量“TotalPerProduct”并在枢轴中使用此常量。 由于您没有包含任何示例数据。我刚刚添加了代码,我认为它应该可以工作。

试试..

    select * from 
(SELECT       Calender.YrPer, [Period DATA 6b].PRODUCT_NO, isnull(sum([Period DATA 6b].LI_QTY+[Period DATA 6b].RG_QTY*1.0),0) as "TotalUnits"
FROM            Calender INNER JOIN
                         [Period DATA 6b] ON Calender.[Starting Period] = [Period DATA 6b].STARTING_PERIOD LEFT OUTER JOIN
                         Allproducts ON [Period DATA 6b].PRODUCT_NO = Allproducts.PRODUCT_NO
where Calender.YrPer >= '2012P05'
group by Calender.YrPer, [Period DATA 6b].PRODUCT_NO
UNION
SELECT       'TotalPerProduct' YrPer, [Period DATA 6b].PRODUCT_NO, isnull(sum([Period DATA 6b].LI_QTY+[Period DATA 6b].RG_QTY*1.0),0) as "TotalUnits"
FROM            Calender INNER JOIN
                         [Period DATA 6b] ON Calender.[Starting Period] = [Period DATA 6b].STARTING_PERIOD LEFT OUTER JOIN
                         Allproducts ON [Period DATA 6b].PRODUCT_NO = Allproducts.PRODUCT_NO
where Calender.YrPer >= '2012P05'
group by [Period DATA 6b].PRODUCT_NO

)

as test1
pivot
(
sum(TotalUnits)
for YrPer
in ([2012P05],[2012P06],[2012P07],[2012P08],[2012P09],[2012P10],[2012P11],[2012P12],[2012P13],[2013P01],[2013P02],[2013P03],[2013P04],[2013P05],[2013P06],[2013P07],[2013P08],[2013P09],[2013P10],[2013P11],[2013P12],[2013P13],[2014P01],[2014P02],[2014P03],[2014P04], [TotalPerProduct])
)
PivotTable
order by PRODUCT_NO

【讨论】:

  • 谢谢 t_m ,它有效。我假设,这将是计算总数的最简单/有效的方法?
  • 很抱歉我没有 15 + 代表,所以我不能投票。
  • 我相信是这样,除非有人有更好的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-31
  • 1970-01-01
  • 1970-01-01
  • 2012-03-24
  • 2015-10-29
  • 2018-09-30
相关资源
最近更新 更多