2009-08-03 6 views
0

weiter verwenden VB6 und MS-ACCESS 2003Wie wird auch ein nicht übereinstimmender Wert angezeigt?

so weiter ...,

TABELLE 1

EMPID DATE  

101 22-07-2009 
201 22-07-2009 
501 22-07-2009 
301 23-07-2009 
401 23-07-2009 
501 23-07-2009 
101 24-07-2009 
501 24-07-2009 

so weiter ...,

Aus der obigen Tabelle zwei Tabellen Ich möchte alle EMP anzuzeigen IDs für das Datum

Erwarteter Ausgang

EMPID DATE 

101 22-07-2009 
201 22-07-2009 
301 
401 
501 22-07-2009 
101 
201 
301 23-07-2009 
401 23-07-2009 
501 23-07-2009 
101 24-07-2009 
201 
301 
401 
501 24-07-2009 

So weiter ...,

Benötigen Sie Abfrage-Hilfe.

+0

Gopal Sie haben bereits eine Frage wie folgt gestellt: http://stackoverflow.com/questions/1220659/how-to-display-all-ids-for-the-selected-date – mlevit

+0

@mlevit - Überprüfen Sie diese Frage, Das ist anders als das hier. – Gopal

+0

Wenn Sie "mit VB6 und Access 2003" sagen, meinen Sie, dass Sie eine in A2003 erstellte MDB verwenden? Wenn ja, ist Access nicht wirklich an Ihrer Frage beteiligt. –

Antwort

2

Haben Sie nicht sicher zu verifizieren ausgeführt, aber das sollte man die meisten der Weg dorthin gelangen:

SELECT 
    AllPossibleCardEvents.PersonId, 
    AllPossibleCardEvents.EmpName, 
    AllPossibleCardEvents.TitleCode, 
    AllPossibleCardEvents.TitleName, 
    AllPossibleCardEvents.CardEventDate, 
    ActualCardEvents.CardEventDate AS MatchingCardEventDate 
FROM 
    (
     (
      SELECT 
       p.PersonId, 
       p.EmpName, 
       p.TitleCode, 
       p.TitleName, 
       AllDates.CardEventDate 
      FROM 
       (SELECT DISTINCT CardEventDate FROM T_Cardevent) AllDates, 
       T_Person p 
     ) AllPossibleCardEvents 
     LEFT OUTER JOIN T_Cardevent ActualCardEvents ON 
      AllPossibleCardEvents.PersonId = Actual.PersonId AND 
      AllPossibleCardEvents.CardEventDate = Actual.CardEventDate 
    ) 

Wo „MatchingCardEventDate“ für Aufzeichnungen NULL sein, dass nicht die tatsächlichen Ereignisse sind. Für tatsächliche Ereignisse ist der Wert von "MatchingCardEventDate" das gültige Datum.

Hoffe, das hilft.

+0

@Chris. Mit deiner Antwort habe ich meine Frage bearbeitet. Können Sie Ihre Antwort für die eine Tabelle ändern, verwende nicht zwei Tabellen – Gopal

+0

@Gopal: Gut, die Antwort hilft bisher. Sie haben immer noch die zwei Tabellen für T_Person und T_Cardevent, richtig? Die anderen "Tabellen" wie AllPossibleCardEvents und ActualCardEvents sind nur etikettiert/Aliase und müssen keine tatsächlichen Tabellen sein. Verstehe ich deine Frage? –

+0

@Chris. Funktioniert gut. Aber ich möchte empname, titlecode, titlename spalte auch, wie Sie Abfrage ändern. Hilf mir – Gopal

2

Ohne Ihr Datenmodell in Frage zu stellen, benötigen Sie eine dritte Tabelle (die ich Termine nennen werde). Sie benötigen ein Kreuz Join bei Tabelle 1 und Daten, die ein Ergebnis aller Mitarbeiter für alle ergeben Tage. Dann müssen Sie Join zu EmpID und Datum verlassen. Die linke Verknüpfung enthält alle Ergebnisse der ersten Verknüpfung, aber nur die übereinstimmenden Zeilen aus Tabelle 2 werden ausgefüllt. Access ist witzig in der Handhabung der Abfragestruktur, auch unterstützt er nicht die SQL-92 CROSS JOIN-Syntax, aber es würde ungefähr so ​​aussehen.

SELECT t1.EmpID, t2.Date 
    FROM (
     SELECT t1.EmpID, d.Date 
      FROM [Table 1] AS t1, 
       Dates AS d 
     ) AS DT1 
     LEFT OUTER JOIN [Table 2] AS t2 
      ON DT1.EmpID = t2.EmpID 
      AND DT1.Date = t2.Date 
ORDER 
    BY DT1.Date, DT1.EmpID; 
Verwandte Themen