2014-11-14 7 views
-2

У меня есть 3 таблицы.SQL Server: JOIN несколько таблиц

Эта таблица используется для Infos магазин клиента

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 про воздуховод, и каждый клиент имеет отдельную цену за свои собственные и общее количество, как этот

Например: идентификатор клиента 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 ниже, но как я могу это сделать? И что я должен положить в "?" erm ... например, более 501, 801, 401 в том, что Price стол?

+0

Это в стиле StackOverflow, чтобы показать нам, какие запросы вы пробовали, прежде чем отправлять свои проблемы, чтобы мы могли видеть, что вы прилагаете некоторые усилия в этом самостоятельно, помимо вопроса. –

ответ

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; 

Что касается верхнего предела: Хранить некоторые супер-большое значение, и вы сделали. Или сохраните нуль и используйте вместо этого o.total between p.from and coalesce(p.to,o.total).

Смежные вопросы