SQL Server:JOIN多个表

时间:2014-11-14 13:13:49

标签: sql-server

我有3张桌子。

此表用于存储客户的信息

Customers

ID          Name
1           'Company A'
2           'Company B'
3           'Company C'

此表保存订单日志

Orders

ID          CustomerID         Quantity      Date
1           1                  200           01/01/2001
2           1                  150           01/02/2001
3           2                  500           01/02/2001
4           3                  200           01/03/2001
5           2                  400           01/03/2001
6           3                  200           01/04/2001

此表保存价格,我们假设我只销售1个产品,每个客户都有自己的单独价格和这样的总数量

示例:对于客户ID 1,从0到100之间的总数量,然后每个的价格为200

Price

CustomerID           From           To          Price
1                    0              100         200
1                    101            500         190
1                    501            ?           180
2                    0              150         195
2                    151            800         180
2                    801            ?           170
3                    0              400         180
3                    401            ?           180

我希望我的输出看起来像这样:

Name          TotalQuantity            Price
---------------------------------------------
Company A     350                      190
Company B     900                      170
Company C     400                      180

我知道我需要先SUM Quantity然后与下面的Price表进行比较,但我该怎么办呢?我该放什么"?"嗯...例如在Price表中超过501,801,401?

1 个答案:

答案 0 :(得分:0)

您感兴趣的每位客户有两件事:订单总数和相应价格。因此,让我们将这些与客户表联系起来:

select c.id, c.name, p.price
from customers c
join
(
  select customerid, sum(quantity) as total
  from orders
  group by customerid
) o on o.customerid = c.id
join price p on p.customerid = o.customerid and o.total between p.from and p.to;

至于没有上限:存储一些超级巨大的价值,你就完成了。或者存储null并使用和o.total between p.from and coalesce(p.to,o.total)代替。