【问题标题】:SQL Pivot and Grand total?SQL Pivot 和总计?
【发布时间】:2018-08-27 11:34:09
【问题描述】:

我有一个数据透视表,我想知道如何添加一个额外的行作为总计,例如,

       Christmas,  Hallowen
       500      ,   800
       600      ,   700
Total  1100     ,   1500

这样的事情会有很大帮助,下面是我用来创建数据透视表的代码。

/*Pivot table */
SELECT *  FROM 
    (SELECT Phase2.[Ref] 
          ,Phase2.[Parties]
          ,Phase2.[TypeOfParty]
          ,Phase2.[Cost]
          ,Phase2.[DressCode]
          ,0  + SUM(Phase2.Cost) OVER (ORDER BY [REF]) AS 'Running Total'
          FROM Stage2) AS BaseData

PIVOT(
    SUM(BaseData.[Cost])
    FOR BaseData.[Parties]
    IN([Christmas], [Halloween])
) AS PivotTable

下面的行确实给出了每方的运行成本,但最好将其作为新行而不是列,看起来要好得多。

 ,0  + SUM(Phase2.Cost) OVER (ORDER BY [REF]) AS 'Running Total'

目前我使用上述当前枢轴的结果是:

ref  TypeOfParty,  DressCode Christmas, Halloween, Running Total
1     Christmas,   XmasWear,  500     ,                500
2     christmas,   XmasWear,  500     ,          ,     1000
3     Halloween,   HallWear,          ,  400     ,     400
4     Halloween,   HallWear,          ,  300     ,     700

如果有人需要我澄清一些事情,我在这里。希望有足够的信息让大家了解我想要做什么。

【问题讨论】:

  • 您使用的是哪个 dbms? (SQL Server?)
  • 我不明白运行总计以及汇总行中的内容。

标签: sql pivot pivot-table


【解决方案1】:

这是你想要的吗?

SELECT s.Ref, s.TypeOfParty, s.DressCode,
       SUM(CASE WHEN Parties = 'Christmas' THEN s.cost ELSE 0 END) as Christmas,
       SUM(CASE WHEN Parties = 'Halloween' THEN s.cost ELSE 0 END) as Halloween
FROM Stage2 s
GROUP BY GROUPING SETS ( (s.ref), () );

这将包括结果集中的总行数。

如果您想计算总计,您可以为每一方添加一个单独的列(一列对于总计行没有意义):

SUM(SUM(CASE WHEN Parties = 'Christmas' THEN s.cost ELSE 0 END)) OVER (ORDER BY s.ref) as Christmas,

【讨论】:

  • 是的,这真的很棒!我可以得到下面的例子: Christmas, Hallowen 500 , 800 600 , 700 Total 1100 , 1500 虽然我做了一些编辑,但我还是得到了它!但我确实有最后一个问题。如何将其作为新行加入到我的数据透视表中,以便将一行作为运行总计?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
  • 1970-01-01
  • 2014-01-06
  • 2012-06-20
  • 2020-02-11
  • 2013-08-07
相关资源
最近更新 更多