表1
Empid number
----------------
100 1
100 2
100 4
100 5
100 6
101 1
我自学SQL,而我遇到的任务是按序列找到最多12个缺失值,然后输出与哪个empid相关联。
我尝试过采用上表并开始的方法
SELECT a number +1 , Min("through), MIn(by number) - 1
整个方法使用现有数字来查找丢失的"下一个/上一个数字。我能够输出缺少哪些数字。但是我不知道如何用关联的id对它进行分组。
我也觉得我的任务很复杂,我正在寻求任何可以提供最佳/最有效的解决方案的人的指导
答案 0 :(得分:1)
假设所有empid
和numbers
都位于表格的某个位置,您可以使用cross join
和过滤器执行此操作。在MS Access中,这看起来像:
select e.empid, n.number
from (select distinct empid from t) as e,
(select distinct number from t) as n
where not exists (select 1
from t
where t.empid = e.empid and t.number = n.number
);
这对您提供的数据不太适用。要处理这种情况,您需要一个包含您要查找的12个数字的表。
答案 1 :(得分:0)
假设您创建一个数字表,其中包含12个记录值为1到12的Number列。
SELECT N.*, E.*
FROM NUMBERS N
CROSS JOIN (SELECT Distinct EmpID FROM table1) E
LEFT JOIN table1 T
on T.EmpID = E.EmpID
and T.Number = N.Number
WHERE T.EmpID is null
或用一张来自上面的数字表替换上面的数字
类似
(Select 1 as Number UNION ALL
Select 2 as Number UNION ALL
Select 3 as Number UNION ALL
Select 4 as Number UNION ALL
Select 5 as Number UNION ALL
Select 6 as Number UNION ALL
Select 7 as Number UNION ALL
Select 8 as Number UNION ALL
Select 9 as Number UNION ALL
Select 10 as Number UNION ALL
Select 11 as Number UNION ALL
Select 112 as Number)
我不记得MS Access是否允许你这样做......