首页 > 解决方案 > 用于报告此期间的下一个期间值的 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 查询中。

标签: sqldb2-400

解决方案


您的 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

推荐阅读