繁体   English   中英

MS ACCESS 2010 SQL技巧

[英]MS ACCESS 2010 SQL Trickery

我有一个日期表和一个客户事实表,如下所示。 我想尝试在剩下的日期上获取与客户事实表不匹配的客户代码。 我不确定该如何在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的可能对,然后将其用作派生表,然后对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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM