Ограничить записи в перекрестном соединении датой вступления в силу

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

Представьте себе два стола:

Покупатель
Идентификатор клиента Sales_Monthly   Date_start
1 акме $80 000,00 15.01.2012
2 Универсальный $50,000.00      1/3/2013
3   SuperMart       $12,000.00 14.04.2013
Календарь
ID Дата
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 30.10.2014
11 30.11.2014
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 ответ

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

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

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

Другие вопросы по тегам