Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 计算';总计';当storeID存储在orders或customers表中时,来自特定存储的orders表_Sql_Database_Sql Server 2008 R2 - Fatal编程技术网

Sql 计算';总计';当storeID存储在orders或customers表中时,来自特定存储的orders表

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

这是一个场景:我有一个orders表和一个customers表。我想计算特定
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列相关的索引。