MS ACCESS 2010 SQL 诡计

MS ACCESS 2010 SQL Trickery

我有日期 table 和客户资料 table,如下所示。我想尝试获取与客户事实不匹配的剩余日期的客户代码 table。我不确定在 SQL 中要做什么才能得到这个。

日期:

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 # | 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

一种可能的解决方案:

您可以通过首先生成 Cust #Day of Year 的可能对的完整集合来找到缺失的行,然后将该集合用作派生的 table 并执行左加入 Cust table 并过滤掉空行,这将是缺失的行。

这个查询:

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