2

这是场景:我有一个订单表和一个客户表。我想计算total特定列的总和storeID。问题是我的公司曾经将它存储storeIDcustomers表中,但现在它被存储在orders表中。在我们的数据库中有订单storeID只在表设置,在表中设置,或在两个表中设置。customersorders

以下是一些架构示例数据供参考:

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。

谢谢,马特

4

1 回答 1

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
于 2012-10-11T16:12:19.747 回答