我有一个由PRODUCT_ID定义的产品表,以及一系列期间。期间与每个产品无关,但有多个期间可能重叠也可能不重叠。该表名为MY_PRODUCTS_BY_PERIOD
以下是我现在拥有的数据示例;
我有另一张表格,按天,按PRODUCT_ID列出所有产品的销售额。该表在下面称为MY_TABLE_OF_SALES_DATA。
我希望使用我的销售数据表获得不同时期这些产品的所有销售总额。我想要实现的一个例子如下:
我遇到的问题是创建一种简洁的方法来总结每个时期的销售情况,同时避免在某些产品的时段重叠时重复计算销售额。
我尝试使用以下代码对每个时段求和:
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
但结果有问题,相同时期的销售情况不同。见下面的例子;
请注意,这两行的前期长度相同,但总销售额不同。
我的代码或方法有什么错误?