【发布时间】:2013-07-11 22:47:33
【问题描述】:
我有一个由 sku、store、 和 period 键入的销售表。由此,我需要一个返回包含 This Year 和 Last Year's 信息的记录的查询。
下面查询的逻辑是这样的:
- 计算去年的销售额(在带表中)
- 在主体(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
【问题讨论】:
-
MySQL 不支持公用表表达式 (CTE) 和 FULL OUTER JOIN。我认为这个问题被错误标记为 MySQL,而不是 SQL Server。
-
内连接可能更适合您所描述的内容。您是否只对两年都有销售的商店/sku 组合感兴趣?
-
我对在这里发帖还是比较陌生。我试图删除 mysql 标记...我只是标记它,因为我对任何 sql 逻辑感兴趣来解释一些行为。
标签: mysql sql with-statement full-outer-join