sql - 分组数据 SQL 的运行总计
问题描述
我知道有很多关于这个的问题,我已经尝试了很多答案,但没有一个对我有用(见下文最有希望的)。
我想获得按项目和日期分组的列金额中的运行总计,分为两组(发票或成本)。正如您在查询中看到的那样,该组依赖于成本中心。
这个主题似乎最接近我想要实现的目标,但我无法让它发挥作用。
使用下面的代码,我收到错误消息“列 'M3FDBPRD.MVXJDTA.FGLEDG.EGAIT2' 在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。” 但我不想在结果中按成本中心分组,我只想用它来分组金额。
我试图达到的结果是这样的(如果使用上面的数据):
我目前的代码是这样的:
SELECT
Project As Projektnr,
LastDayOfMonth,
-SUM(CASE WHEN CostCenter= '9000' THEN Amount
WHEN CostCenter = '2100' THEN Amount
WHEN CostCenter = '2200' THEN Amount
WHEN CostCenter = '2300' THEN Amount END) OVER (ORDER BY LastDayOfMonth) AS Invoiced,
-SUM(CASE WHEN CostCenter > '9000' and CostCenter < '9999' THEN Amount END) OVER (ORDER BY LastDayOfMonth) AS RunningTotalCosts
FROM [M3FDBPRD].[MVXJDTA].[FGLEDG]
WHERE Project = '150001'
GROUP BY LastDayOfMonth, Project
ORDER BY LastDayOfMonth
我有 SQL Server 版本 13
谢谢
解决方案
您正在混合窗口函数和聚合。逻辑如下:
SUM(SUM(CASE WHEN CostCenter IN ('9000' '2100', '2200', '2300')
THEN Amount
END)
) OVER (ORDER BY LastDayOfMonth) AS Invoiced,
SUM(SUM(CASE WHEN CostCenter > '9000' and CostCenter < '9999'
THEN Amount
END)
) OVER (ORDER BY LastDayOfMonth) AS RunningTotalCosts
也就是SUM()
s需要嵌套。内部SUM()
是聚合。外部SUM()
是窗口函数。
推荐阅读
- javascript - 如何让动画淡入淡出
- 使用 React 还是 CSS?
- python - 未知初始化器:加载 Keras 模型时的 GlorotUniform
- npm - NPM 包安装失败
- angular - Angular 7 将导入模块传递给功能模块
- blueprism - 如何在 Blue Prism 中的 Excel 和 SQL 数据表之间获取不匹配的数据?
- c# - 添加 char 类型值时,odbcparameter 和 oledbparameter 有什么区别?
- html - 为什么图像样式会阻止另一张图像?
- svg - 两个子组件之间缺少 svg 光标指针
- ruby-on-rails - Ruby on Rails 控制器重定向未在 WEBGL 运行时发生
- react-native - React Native BackHandler 问题与反应导航