2017-09-20 138 views
0

表1查找序列(SQL)缺失值

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-12。交叉連接到一個不同的empID列表,然後將它加入到你的table1中。其中table1.number爲空。 – xQbert

+0

你缺少數字的順序是什麼? –

+0

該序列在數字表中,例如1,2,3,5,6將顯示4已被跳過 –

回答

1

屁股如果所有empid s和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個你正在尋找的號碼的表格。

0

假定創建具有12個記錄的值1具有數字表號碼列至12

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 

或替代爲derrived表號碼錶上方

類似

(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會讓你這樣做,但...

+1

您可以在MS Access中做一些技巧來創建更靈活的派生表:'SELECT DISTINCT Abs(1) .ID Mod 10)+ Abs(Tens.ID Mod 10)* 10 AS Sequence FROM MSysObjects AS Ones,MSysObjects AS Tens Where Abs(Ones.ID Mod 10)+ Abs(Tens.ID Mod 10)* 10 BETWEEN 1 AND 12'產生一個從0到99的序列,'WHERE'過濾出你不想要的序列。 'MSysObjects'總是包含足夠的ID來完成這個工作,即使是在一個空的數據庫中。 –