月間売上のストアドプロシージャを作成しています。ストアド プロシージャには割引があります。この割引は、3 つの異なるテーブルから取得できます。割引が id.rabatt にない場合は dp.rabatt からフェッチする必要があり、そこにない場合は ds.rabatt からフェッチする必要があります。したがって、最初の 2 つが空である可能性がありますが、最後の 1 つには常に割引があります..
プロシージャの WHEN 部分の設計に大きな問題があります。時間があれば、途中で私を助けてください:
CASE (
when
Isnull(id.rabatt, Isnull(u.rabatt, id.rabatt)) then..
when
Isnull(dp.rabatt, Isnull(x.rabatt, dp.rabatt)) then..
when
Isnull(ds.rabatt, Isnull(y.rabatt, ds.rabatt)) then..
end)
AS 'Discount',
Isnull を使用する必要がある理由は、各割引テーブル内に 2 つの異なる割引があり、1 つは永久 (2999) で、もう 1 つは選択された期間があるためです。私がここに示すように:
LEFT OUTER JOIN discount AS id
ON id.identifiers = isa.identifiers
AND id.store = BV.name
AND id.from_date <= isa.sales_date
AND id.to_date >= isa.sales_date
AND id.to_date < '2999-01-01'
LEFT OUTER JOIN discount AS u
ON u.identifiers = isa.identifiers
AND u.to_date = '2999-01-01'
他の 2 つのテーブルは、同様の方法で設計されています。