2017-09-20 8 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 

のような全体的なアプローチを開始したアプローチを試みたしました。私はその出力番号にできますよ

私もこの作業を複雑にしているように感じています。最高の/最も効率的な方法を手助けできる人からの指導を探しています。これについて行くの

+0

作成するumberテーブル1-12。それをempIDの別のリストにクロスジョインしてから、テーブル1にジョインしてください。ここで、table1.numberはnullです。 – xQbert

+0

番号がない場合のシーケンスは何ですか? –

+0

シーケンスが数値表にある1,2,3,5,6は、例えば4がスキップされたことを示します –

答えて

1

尻すべてのempidnumbersがどこかのテーブルにあるとすれば、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

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) 

よう

何かの上の数字テーブルのためderrivedテーブルを代用に12のレコードの値1を指定した数値列を持つ数値テーブルを作成すると想定します私はMS Accessがあなたにこれをやらせるかどうか覚えていません...

+1

MS Accessでは、より柔軟な派生テーブルを作成するためにいくつかトリッキーを行うことができます: 'SELECT DISTINCT Abs(Ones .ID Mod 10)+ Abs(Tens.ID Mod 10)* 10 ASシーケンス From MSysObjects AS Ones、MSysObjects AS Tens ここで、Abs(Ones.ID Mod 10)+ Abs(Tens.ID Mod 10)* 10 BETWEEN 1 AND 12'は0から99までのシーケンスを生成し、 'WHERE'は望ましくないものをフィルタリングします。 'MSysObjects'は空のデータベースであっても、この作業をするのに十分なIDを常に含んでいます。 –