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
我有日期 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