跨多个日期期间的总和值

时间:2015-02-09 12:03:17

标签: sql oracle

我有一个由PRODUCT_ID定义的产品表,以及一系列期间。期间与每个产品无关,但有多个期间可能重叠也可能不重叠。该表名为MY_PRODUCTS_BY_PERIOD

以下是我现在拥有的数据示例;

Data, product by periods

我有另一张表格,按天,按PRODUCT_ID列出所有产品的销售额。该表在下面称为MY_TABLE_OF_SALES_DATA。

我希望使用我的销售数据表获得不同时期这些产品的所有销售总额。我想要实现的一个例子如下:

sum of sales by period

我遇到的问题是创建一种简洁的方法来总结每个时期的销售情况,同时避免在某些产品的时段重叠时重复计算销售额。

我尝试使用以下代码对每个时段求和:

SELECT PREPERIODSTART, PREPERIODEND, PERIODSTART, PERIODEND, POSTPERIODSTART, POSTPERIODEND
     ,SUM(case
             when MS.DAY_DATE BETWEEN PREPERIODSTART and PREPERIODEND
               then MS.CASH_SALES
             else 0
           end) SUM_PRE_SALES
     ,SUM(case
             when MS.DAY_DATE BETWEEN PERIODSTART and PERIODEND
               then MS.CASH_SALES
             else 0
           end) SUM_PROMO_SALES
     ,SUM(case
             when MS.DAY_DATE BETWEEN POSTPERIODSTART and POSTPERIODEND
               then MS.CASH_SALES
             else 0
           end) SUM_POST_SALES          
FROM MY_TABLE_OF_SALES_DATA MS
INNER JOIN MY_PRODUCTS_BY_PERIOD SP
ON MS.PRODUCT_ID = SP.PRODUCT_ID
GROUP BY PREPERIODSTART, PREPERIODEND, PERIODSTART, PERIODEND, POSTPERIODSTART, POSTPERIODEND
ORDER BY PREPERIODSTART, PREPERIODEND, PERIODSTART, PERIODEND, POSTPERIODSTART, POSTPERIODEND

但结果有问题,相同时期的销售情况不同。见下面的例子;

incorrect answer

请注意,这两行的前期长度相同,但总销售额不同。

我的代码或方法有什么错误?

0 个答案:

没有答案