我有一个由sku、store和period键入的销售表。由此,我需要一个返回包含今年和去年信息的记录的查询。
下面的查询背后的逻辑是这样的:
- 计算去年的销售额(在 with 表中)
- 计算本年度销售额的主体(WHERE CLAUSE)
- 将“LAST YEAR”表连接到主表。仅加入 sku 和商店(您不能按日期加入,因为它们不会重叠)
我的问题是去年的结果不是全部。我的结果表现得好像我正在执行 LEFT JOIN,而不是返回“LAST YEAR”表中的所有结果。
附加细节:
- 当我运行 LEFT JOIN 和 FULL OUTER JOIN 时,我得到相同的结果。
- 当我独立执行“WITH”子句时,结果是正确的
- 当我运行整个报表时,去年的销售额不是全部
下面的代码已经简化了一些......我不太担心语法,但更多的是关于逻辑。如果有人有任何想法,或者知道我的逻辑中可能存在的缺陷,我会全神贯注!提前致谢!
WITH lastYear AS (
SELECT
spsku "sku",
spstor "store",
sum(spales) "sales_ly"
FROM SALES
WHERE spyypp BETWEEN 201205 AND 201205
GROUP BY spstor, spsku
)
SELECT
Sales_report.spstor "store",
sum(spales) "bom_retail",
sum(LY."sales_ly") "sales_ly"
FROM SALES Sales_report
FULL OUTER JOIN lastYear LY ON LY."sku" = spsku AND LY."store" = spstor
WHERE spyypp BETWEEN 201305 AND 201305
GROUP BY spstor