我们有一个包含列的现有表:
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
注意:首先,上面的代码选择所有项目代码和相应的价格(来自选定的供应商)。然后处理结果以获得每个项目的价格总和。
它已经工作了,问题是,我使用了子查询,我担心当表数据增长时,查询的性能会很差。我的问题是,如果没有子查询,我能做到这一点吗?
答案 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