sql - 用于报告此期间的下一个期间值的 SQL 方法
问题描述
这可能已经得到回答,但我无法找出我需要的正确搜索词。我们按年初 (BOM) 的年份/期间存储值。一个月的 BOM 与上个月的月末 (EOM) 值相同。我需要一种方法来报告这一点。所以 2018-02 BOM = 2018-01 EOM。
我想我可能可以使用一些简单的东西,但它不考虑 12 个月的月/年换行,因为这些字段是数字的。
select yr as YEAR, (pd-1) as PERIOD, sum(BOM) as EOM
from Table1
where type = '3'
group by yr, pd
order by yr desc, pd desc
这适用于中间月份,但不适用于 1 月份,它变为 2018-0 而不是 2017-12。
Example Data
Yr Pd Type BOM
18 02 3 100
18 02 3 100
18 02 2 200
18 02 2 100
18 01 3 100
18 01 3 100
18 01 2 200
18 01 2 100
18 01 3 100
18 01 2 300
17 12 3 100
17 12 3 200
17 12 2 300
17 12 3 200
17 12 2 100
17 11 3 300
17 11 2 400
17 11 3 400
17 11 2 100
所以我正在寻找的结果是:
Yr Pd EOM
18 01 200
17 12 300
17 11 500
17 10 700
我目前在 System iNavigator 中工作,但希望在某个时候将其移动到外部连接的 Excel 查询中。
解决方案
您的 DB2 数据库应该能够使用CASE WHEN
哪个可以用来计算年份和月份,取决于月份。
例如:
select
CASE WHEN pd = 1 THEN yr - 1 ELSE yr END as Yr,
CASE WHEN pd = 1 THEN 12 ELSE pd - 1 END as Pd,
SUM(BOM) as EOM
from Table1
where type = '3'
group by yr, pd
order by yr desc, pd desc
推荐阅读
- typescript - 在 TypeScript 中,如何定义提供从成员对象返回的值的方法类型?
- html - 使用动态表的静态/粘性标题
- kotlin - 是否需要在 columnInfo 注释中定义名称?
- azure-pipelines - 在每个管道运行中在 Blob 存储中创建和保存新文件
- mysql - Vert.x (Kotlin) 中使用的 MySQLPool
- scala - 如何获得具有下限的 Class[_ <: A]]
- c# - Open Generic的IEnumerable的依赖注入
- javascript - react setState似乎被redux调度取消了?
- javascript - 在 javascript 中,如何将变量用作对象属性名称的一部分
- dc.js - 在箱线图 dc.js 上显示包含数据的交互式工具提示,而不是工具提示标题数据