Here's the scenario: I've got an orders table and a customers table. I'd like to calculate the SUM of the column total
for specific storeID
. The problem is that my company used to store the storeID
in the customers
table but now it's being stored in the orders
table. There are orders in our database where the storeID
is only set in the customers
table, only set in the orders
table, or set in both tables.
Here's some schema example data for reference:
Table Orders
:
+----+-------+------------+---------+
| id | total | customerID | storeID |
+----+-------+------------+---------+
| 0 | 100 | 1 | 1 |
| 1 | 50 | 1 | NULL |
| 2 | 75 | 1 | 1 |
+----+-------+------------+---------+
Table Customers
:
+----+----------+
| id | storeID |
+----+----------+
| 1 | 1 | NULL |
+----+----------+
The query I've been playing around with trying to calculate the sum of the order total looks like this:
SELECT SUM(total)
FROM orders o
INNER JOIN customers c
ON c.ID = o.customerID
WHERE ISNULL(c.storeID,o.storeID) = @storeID
This query works, but it's super slow because we have so many order records in our database. Is there a more efficient way to do this? I'm using SQL Server 2008 R2.
Thanks, Matt