查找序列中缺少的值(sql)

查找序列中缺少的值(sql),sql,ms-access,Sql,Ms Access,表1 我在自学SQL,我遇到的一项任务是按12的顺序查找缺失的值,并输出与empid关联的值 我尝试了一种采用上表的方法,开始时如下 Empid number ---------------- 100 1 100 2 100 4 100 5 100 6 101 1 整个方法使用现有的数字来查找缺失的“下一个/上一个数字”。我能够输出缺失的数字。但是我不知道如何将其与相关id分组 我还觉得我已经

表1

我在自学SQL,我遇到的一项任务是按12的顺序查找缺失的值,并输出与empid关联的值

我尝试了一种采用上表的方法,开始时如下

Empid    number
----------------
100         1
100         2
100         4
100         5
100         6
101         1
整个方法使用现有的数字来查找缺失的“下一个/上一个数字”。我能够输出缺失的数字。但是我不知道如何将其与相关id分组


我还觉得我已经把任务复杂化了,我正在寻求任何人的指导,他们可以帮助我找到最好/最有效的方法来完成这项工作。假设所有
empid
s和
number
都在表中的某个地方,你可以通过
交叉连接和筛选来完成这项工作。在MS Access中,这看起来像:

SELECT a number +1 , Min("through), MIn(by number) - 1

这对您提供的数据不太有效。要处理这种情况,您需要一个包含您正在查找的12个数字的表。

假设您创建了一个数字表,其中的数字列的数字值为1到12

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
                 ); 
或者用数字表代替上面的数字表

差不多

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

我不记得MS Access是否允许您这样做…

创建一个数字表1-12。将其交叉连接到empID的不同列表,然后将其左连接到您的表1。其中table1.number为空。缺少数字的序列是什么?序列在数字表中,例如,1,2,3,5,6将显示4已被跳过您可以在MS Access中使用一些技巧来创建更灵活的派生表:
选择不同的Abs(one.ID Mod 10)+Abs(Tens.ID Mod 10)*10作为序列,其中MSysObjects作为一,MSysObjects作为十,其中Abs(one.ID Mod 10)+Abs(Tens.ID Mod 10)*10介于1和12之间
生成一个从0到99的序列,其中
会过滤掉您不想要的序列。
MSysObjects
始终包含足够的ID,即使在空数据库中也可以执行此操作。
(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)