2015-05-25 6 views
0

У меня есть таблица дат и таблица фактов клиента, как показано ниже. Я хочу попытаться получить код клиента в оставшиеся даты, которые не соответствуют таблице фактов клиента. Я не уверен, что делать в SQL, чтобы получить это.MS ACCESS 2010 SQL Trickery

Даты:

Day of year| TY Date | LY Date 
-----------+----------+--------- 
200  | 2/1/2015 | 2/2/2014 
201  | 2/2/2015 | 2/3/2014 
202  | 2/3/2015 | 2/4/2014 
203  | 2/4/2015 | 2/5/2014 
204  | 2/5/2015 | 2/6/2014 
205  | 2/6/2015 | 2/7/2014 

Cust:

Cust # | Day of Year | TY Date | LY Date 
-------+-------------+----------+-------- 
300 | 203   | 2/4/2015 | 2/5/2014 
900 | 205   | 2/6/2015 | 2/7/2014 

РЕЗУЛЬТАТ:

Cust # | Day of Year | TY Date | LY Date 
-------+-------------+----------+-------- 
300 | 200   | 2/1/2015 | 2/2/2014 
300 | 201   | 2/2/2015 | 2/3/2014 
300 | 202   | 2/3/2015 | 2/4/2014 
300 | 204   | 2/5/2015 | 2/6/2014 
300 | 205   | 2/6/2015 | 2/7/2014 
900 | 200   | 2/1/2015 | 2/2/2014 
900 | 201   | 2/2/2015 | 2/3/2014 
900 | 202   | 2/3/2015 | 2/4/2014 
900 | 203   | 2/4/2015 | 2/5/2014 
900 | 204   | 2/5/2015 | 2/6/2014 

ответ

2

Одно из возможных решений:

Вы можете найти недостающие строки на первой генерации комп lete набор возможных пар Cust # и Day of Year, а затем использовать этот набор как производную таблицу и выполнить левое соединение с таблицей Cust и отфильтровать строки с нулевыми значениями, которые будут отсутствовать.

Этот запрос:

select a.* 
from (
    select [Cust#], d.[Day of year] from cust, dates as d 
) a 
left join Cust as c on c.[Cust#] = a.[Cust#] and c.[Day of Year] = a.[Day of year] 
where c.[Cust#] is null 
order by a.[Cust#], a.[Day of Year] 

даст вам следующий результат:

Cust# Day of year 
300  200 
300  201 
300  202 
300  204 
300  205 
900  200 
900  201 
900  202 
900  203 
900  204 
Смежные вопросы