SQL中不同列的总和

时间:2012-04-19 09:45:25

标签: sql

我们有一个包含列的现有表:

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

注意:首先,上面的代码选择所有项目代码和相应的价格(来自选定的供应商)。然后处理结果以获得每个项目的价格总和。

它已经工作了,问题是,我使用了子查询,我担心当表数据增长时,查询的性能会很差。我的问题是,如果没有子查询,我能做到这一点吗?

1 个答案:

答案 0 :(得分: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