2015-01-16 2 views
0

В SQL Server 2012 я пытаюсь воссоздать подробную транзакционную запись транзакции из двух таблиц с исторической сводной информацией, но не может ограничивать записи на основе запуска клиента Дата. (На самом деле есть 3 таблицы, одна из которых содержит категории товаров и% продаж по категориям, но у меня нет проблем с этой частью креста). Любая помощь будет оценена по достоинству.предельные записи в кросс-соединении по дате вступления в силу

Представьте две таблицы:

 
Customer 
ID Customername Sales_Monthly Date_start 
1 Acme   $80,000.00  1/15/2012 
2 Universal  $50,000.00  1/3/2013 
3 SuperMart  $12,000.00  4/14/2013 
 
Calendar 
ID Date 
1 1 /31/2014 
2 2 /28/2014 
3 3 /31/2014 
4 4 /30/2014 
5 5 /30/2014 
6 6 /30/2014 
7 7 /30/2014 
8 8 /30/2014 
9 9 /30/2014 
10 10/30/2014 
11 11/30/2014 
12 12/30/2014 

Простой перекрестное соединение:

SELECT Calendar.Date, Customer.ID, Customer.Customername, Customer.Sales_2013 
FROM Calendar, Customer 

производит 36 записей, как и следовало ожидать (3 клиентов х 12 месяцев)

Однако , Я хочу только создать записи 28 записей, где [Calendar.Date]> [Customer.Date_start]

Кажется, я не могу найти WHERE CLAUSE и любой тип или подзапрос, который ограничит мои записи на основе поля Customer.Date_start. Любые предложения по этому поводу?

+1

Основываясь на данных вашего образца, почему было бы всего 28 результатов? Все значения calendar.Date представляют собой> все значения customer.Date_Start. –

+2

Все записи календаря>, чем дата начала с 2013 и 2012 годов. – SteveB

+0

Сначала выберите Calendar.Date, где он больше Customer.Date_start и поместит все эти записи во временную таблицу. Затем перекрестите эту временную таблицу со своей таблицей Customer. – Khaltazar

ответ

0

Если вы присоединяетесь к полю в крестовом соединении, это уже не крест-соединение. Предполагая, что данные вашего клиента в вопросе неверны, и вы указали, что это будет 2014 год во всех записях клиентов, вы можете сделать это так.

SELECT * 
FROM Customer a 
    JOIN Calendar b ON b.Date > a.Date_start 

Это производит 33 строк (12 для клиента 1, 12 для клиента 2 и 9 для клиента 3, а не 28, как вы ожидали), но, надеюсь, что мой ответ будет указывать вам в правильном направлении.

+0

Спасибо. Спасибо за ваш элегантный ответ. Очевидно, я не пробовал этого во всех своих попытках. Я думаю, что у меня всегда был клиент date_start, поэтому создавался неправильный тип соединения. (Я понимаю, что, указав условие, это уже не крест-соединение, но концепция схожа, и я подумал, что это лучший способ правильно задать вопрос.) –