1

列を持つ既存のテーブルがあります。

ItemCode nvarchar
Supplier1Price nvarchar
Supplier2Price nvarchar
Supplier3Price nvarchar
SelectedSupplier int (1, 2 or 3)

このテーブルは、さまざまなサプライヤーからの問い合わせに使用されます。私がやりたいことは、選択したサプライヤーから同じアイテムの合計を取得することです。

例:

ItemCode   Supplier1Price  Supplier2Price  Supplier3Price  SelectedSupplier
item-00    100             200             300             1
item-00    200             100             300             2
item-00    200             100             300             2
item-01    200             300             100             3
item-01    200             100             300             2

結果は次のようになります。

ItemCode  Total
item-00   300   
item-01   200

私がしたことはこれです:

select 
    ItemCode, 
    sum(SupplierPrice) as Total
from 
    (select 
        ItemCode,
        case SelectedSupplier
            when 1 then Supplier1Price
            when 2 then Supplier2Price
            when 3 then Supplier3Price
        end) as SupplierPrice
     from CanvassTable)
 group by ItemCode

注: 最初に、上記のコードはすべてのアイテムコードと対応する価格を (選択したサプライヤーから) 選択します。結果は、各アイテムの価格の合計を取得するために処理されます。

それはすでに機能しています。問題は、サブクエリを使用したことです。テーブル データが大きくなると、クエリのパフォーマンスが低下するのではないかと心配しています。私の質問は、サブクエリなしでこれを行う方法はありますか?

4

1 に答える 1

3

クエリが機能する場合は、次のようにしてください。

select 
    ItemCode,
    SUM(case SelectedSupplier
        when 1 then Supplier1Price
        when 2 then Supplier2Price
        when 3 then Supplier3Price
    end) as SupplierPrice
from CanvassTable
group by ItemCode
于 2012-04-19T09:59:21.897 に答える