2017-09-20 3 views
0

Table1Finden Werte in einer Sequenz (SQL)

Empid number 
---------------- 
100   1 
100   2 
100   4 
100   5 
100   6 
101   1 

fehlte bin ich selbstlernend SQL, und eine Aufgabe, die ich kenne, um die fehlende Werte in der Folge bis zu 12 zu finden und löschen die EmpID ist assoziiert.

Ich habe einen Ansatz versucht, die die obige Tabelle nimmt und beginnt wie

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

Der gesamte Ansatz, um die bestehenden Nummern verwenden, um die fehlenden „Vor/Zurück-Nummer zu finden. Ich bin zu Ausgabe, die Zahlen der Lage fehlen, aber ich weiß nicht, wie man es mit der zugehörigen ID gruppiert.

Ich habe auch das Gefühl, ich habe die Aufgabe kompliziert, ich suche nach Anleitung von jedem, der auf die beste/effizienteste Weise helfen kann davon auszugehen

+0

erstellen Sie ein Benutzer Tabelle 1-12. kreuzen Sie es zu einer eindeutigen Liste von empID an, dann link verbinden Sie das zu Ihrem table1. wo table1.number ist null. – xQbert

+0

In welcher Reihenfolge haben Sie fehlende Zahlen? –

+0

Die Reihenfolge ist in der Zahlentabelle, 1,2,3,5,6 zum Beispiel wird angezeigt, dass 4 übersprungen wurde –

Antwort

1

Ass dass alle empid s und numbers irgendwo in der Tabelle sind, können Sie dies mit einem cross join und Filter tun. In MS Access, das wie folgt aussieht:

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 
       ); 

Das wird nicht ganz Arbeit für die Daten, die Sie geliefert haben. Um diese Situation zu bewältigen, benötigen Sie eine Tabelle, die die 12 Zahlen enthält, nach denen Sie suchen.

0

vorausgesetzt, dass Sie eine Zahlen-Tabelle mit Zahlenspalte mit 12 Datensätzen Wert 1 bis 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 

erstellen oder schließt man Tabelle für Zahlen Tabelle ersetzen oben

so etwas wie

(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) 

Ich kann mich nicht erinnern, ob MS Access Sie dies tun lassen wird ...

+1

Sie können einige Tricks in MS Access machen, um eine flexiblere abgeleitete Tabelle zu erstellen: 'SELECT DISTINCT Abs (Ones .ID Mod 10) + Abs (Tens.ID Mod 10) * 10 AS Sequenz VON MSysObjects AS Ones, MSysObjects AS Tens WHERE Abs (Ones.ID Mod 10) + Abs (Tens.ID Mod 10) * 10 ZWISCHEN 1 AND 12' erzeugt eine Sequenz von 0 bis 99, und die 'WHERE' filtert diejenigen heraus, die Sie nicht wollen. 'MSysObjects' enthält immer genug IDs, um dies auch in einer leeren Datenbank zu ermöglichen. –

Verwandte Themen