计算总数的总和'当storeID存储在订单或客户表中时,来自特定商店的订单表

时间:2012-10-11 15:29:58

标签: sql database sql-server-2008-r2

这是一个场景:我有一个订单表和一个客户表。我想计算特定totalstoreID的总和。问题是我的公司过去常常将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。

谢谢, 马特

1 个答案:

答案 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