这是一个场景:我有一个订单表和一个客户表。我想计算特定total
列storeID
的总和。问题是我的公司过去常常将storeID
存储在customers
表中,但现在它存储在orders
表中。我们的数据库中有一些订单storeID
仅 设置在customers
表中,仅在orders
表中设置,或者在两个表中设置。
以下是一些架构示例数据供参考:
表Orders
:
+----+-------+------------+---------+
| id | total | customerID | storeID |
+----+-------+------------+---------+
| 0 | 100 | 1 | 1 |
| 1 | 50 | 1 | NULL |
| 2 | 75 | 1 | 1 |
+----+-------+------------+---------+
表Customers
:
+----+----------+
| id | storeID |
+----+----------+
| 1 | 1 | NULL |
+----+----------+
我一直在尝试计算订单总和的总和的查询如下:
SELECT SUM(total)
FROM orders o
INNER JOIN customers c
ON c.ID = o.customerID
WHERE ISNULL(c.storeID,o.storeID) = @storeID
这个查询有效,但它超级慢,因为我们的数据库中有很多订单记录。有没有更有效的方法来做到这一点?我正在使用SQL Server 2008 R2。
谢谢, 马特
答案 0 :(得分:1)
SELECT SUM(total)
FROM orders o
WHERE coalesce(o.storeID, (
select storeID
from customers
where id = o.customerID
) = @storeID
顺便说一下,你只需更新订单表,然后再从那里查询:
update orders o
set storeID = (
select storeID
from customers
where id = o.customerID
)
where storeID is null