0

月間売上のストアドプロシージャを作成しています。ストアド プロシージャには割引があります。この割引は、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 つのテーブルは、同様の方法で設計されています。

4

1 に答える 1