【问题标题】:SUMIF, Group by, Aggregate bySUMIF、分组依据、聚合依据
【发布时间】:2020-01-17 13:37:57
【问题描述】:

我需要添加一列来显示基于业务线和季度的收入总和,同时保持原始数据不变。第 2 步是通过将原始收入行除以收入总和来计算 %Revenue - 计算权重。

我可以在 excel 中轻松完成此操作,但在 SQL 中无法计算。 感谢帮助。

所以,在我的数据中,我有 1000 行。列是业务线(如渠道与跨国公司)、季度(如 Q319 和 Q419)、收入、单位和部件号。

我尝试使用 group by function 对其进行求和,但它不起作用。

SELECT 
   FF.Quarter,
   FF.CHANNEL,
   FF.Units,
   FF.Material,
   FF.Revenue,

   SUM (Case When FF.Channel = '02' and FF.Quarter = '2019Q3' then FF.Revenue when FF.Channel = '01' and FF.Quarter = '2019Q3' then FF.Revenue Else 1 End) as Revenue_SUM

   FROM dbo.[Flat File] as FF
   Group by FF.Quarter, FF.Channel, FF.Units, FF.Revenue, FF.Material

期望创建一个列,将每行的百分比权重计算为 %(收入除以收入总和)。

这是侧面的数据表和预期结果。我想编写一个保留原始数据的查询并在其旁边添加两列。

【问题讨论】:

  • 样本数据和期望的结果会有所帮助。你确定你使用的是 MySQL 吗? dbo 和方括号通常与 SQL Server 相关联。
  • 对不起,我正在使用 SQL Server。
  • 你好,戈登,我刚刚在我的帖子中附加了基础数据和预期结果。你能看到吗?我正在尝试您刚刚附加的查询。让我看看我是否成功。

标签: sql sql-server


【解决方案1】:

如果我理解正确,你想要一个窗口函数:

SELECT FF.Quarter, FF.CHANNEL, FF.Units, FF.Material, FF.Revenue,
       SUM(FF.Revenue) OVER (PARTITION BY FF.Channel, FF.Quarter) as Revenue_SUM
FROM dbo.[Flat File] as FF;

【讨论】:

  • 非常感谢.. 让我试试.. 抱歉,我在 SQL Server 中。
  • 戈登,更复杂的说法。我可以这样写吗? SUM(如果 [FGS 类型] = 'PIB' 则 ((HS_Cost.Cost + Tray_Cost.[Tray Cost])*Units) 当 [FGS 类型] = 'Tray' 则 Tray_Cost.[Tray Cost]*Units Else '0 ' End) over (Partition by FF.Channel, FF.Quarter) as [Std COGS SUM]
  • 更新:此语法有效。非常感谢.. SUM(如果 [FGS Type] = 'PIB' then ((HS_Cost.Cost + Tray_Cost.[Tray Cost])*Units) When [FGS Type] = 'Tray' then Tray_Cost.[Tray Cost] *Units Else '0' End) over (Partition by FF.Channel, FF.Quarter) as [Std COGS SUM]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-13
相关资源
最近更新 更多