2017-03-28 4 views
0

私は売り上げを記録するテーブルを持っており、各アイテムに課税された税額に関するレポートが必要です。基本的なルールは4月1日が.52%の税金を納める前にすべての売上です。その日以降のすべての売上には0.5%の税があります。SQL Server:日付別に異なる乗数を適用する

私は、これは次のクエリを使用して取得しようとしている

select ItemCode, 
    sum(Quantity) QuantitySold, 
    WhsCode as Store, 
    case when (docdate < '20170401') then sum(Quantity * .0052) else sum(Quantity * .005) end as Tax 
from SalesTable 
group by whscode, 
    itemcode 

は、しかし、私はそれが いずれかの集計に含まれていないため

DocDateは、」選択リストでは無効になってしまいます関数またはGROUP BY句を使用します。

私はそれをそのまま実行するとエラーが発生します。 DocDateをgroup by節に追加すると、重複が混乱します(一例として、185行から1508行になりました)。

SQLは、条件文がGroup句に含まれていない文、または別のものを使用する必要がある文をWHEN文で使用することを許可していませんか?

+0

あなたの代わりに数量 'の売上高合計の' quantity' * price'に税を適用していることを奇妙です。私はそれが間違っていると言っているわけではない、それはちょうどそのように書かれて見て奇妙に思える。 – SqlZim

+0

おっと、そうです、品物別に異なる税金が混じっています - それは数量ではなく価格でなければなりません。 – ConnorU

答えて

3

エラーは、docdateをgroup by句に直接追加せずに使用しているためです。

私は、これはあなたが欲しいものだと思う:

select ItemCode, 
    sum(Quantity) QuantitySold, 
    WhsCode as Store, 
    sum(price * case when docdate < '20170401' then 0.0052 else 0.005 end) as Tax 
from SalesTable 
group by whscode, 
    itemcode 
関連する問題