Sql 计算';总计';当storeID存储在orders或customers表中时,来自特定存储的orders表
这是一个场景:我有一个orders表和一个customers表。我想计算特定Sql 计算';总计';当storeID存储在orders或customers表中时,来自特定存储的orders表,sql,database,sql-server-2008-r2,Sql,Database,Sql Server 2008 R2,这是一个场景:我有一个orders表和一个customers表。我想计算特定storeID的total列的总和。问题是,我的公司以前将storeID存储在customers表中,但现在它被存储在orders表中。我们的数据库中有一些订单,storeID仅在customers表中设置,仅在orders表中设置,或在两个表中都设置 以下是一些架构示例数据供参考: 表订单: +----+-------+------------+---------+ | id | total | customerID
storeID
的total
列的总和。问题是,我的公司以前将storeID
存储在customers
表中,但现在它被存储在orders
表中。我们的数据库中有一些订单,storeID
仅在customers
表中设置,仅在orders
表中设置,或在两个表中都设置
以下是一些架构示例数据供参考:
表订单
:
+----+-------+------------+---------+
| id | total | customerID | storeID |
+----+-------+------------+---------+
| 0 | 100 | 1 | 1 |
| 1 | 50 | 1 | NULL |
| 2 | 75 | 1 | 1 |
+----+-------+------------+---------+
+----+----------+
| id | storeID |
+----+----------+
| 1 | 1 | NULL |
+----+----------+
表客户
:
+----+-------+------------+---------+
| id | total | customerID | storeID |
+----+-------+------------+---------+
| 0 | 100 | 1 | 1 |
| 1 | 50 | 1 | NULL |
| 2 | 75 | 1 | 1 |
+----+-------+------------+---------+
+----+----------+
| 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
这个查询可以工作,但速度非常慢,因为我们的数据库中有太多订单记录。有没有更有效的方法?我正在使用SQLServer2008R2
谢谢,
马特
顺便说一句,您只需更新orders表,然后仅从那里进行查询:
update orders o
set storeID = (
select storeID
from customers
where id = o.customerID
)
where storeID is null
如果在客户记录和客户的一个订单上都设置了storeID,那么进行联合是否会导致订单总额增加两倍?如果
storeID
在订单
和客户
之间不匹配,会发生什么情况?您可能会得到两个可能不同的结果-1)所有在特定商店购物的客户的所有订单2)给定商店的所有订单。@marc_s抱歉,2008 R2。我在想Visual Studio 2010您的表上有什么类型的索引?没有看到任何与storeID列相关的索引。