sku、store、およびperiodをキーとする sales テーブルがあります。このことから、今年と昨年の両方の情報を含むレコードを返すクエリが必要です。
以下のクエリの背後にあるロジックは次のとおりです。
- 昨年の売上を計算する (with テーブル内)
- 今年の売上を本体で計算(WHERE節)
- 「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