2009-08-03 59 views
0

使用VB6和MS-Access 2003中如何顯示不匹配的值?

...等,

表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 

...等,

從上表兩個表我想顯示所有EMP ids for the date wise

預期輸出

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 

等等...,

需要查詢幫助。

+0

Gopal你已經問過這樣的問題:http://stackoverflow.com/questions/1220659/how-to-display-all-ids-for-the-selected-date – mlevit 2009-08-03 05:52:27

+0

@mlevit - 檢查這個問題,這與那個不同。 – Gopal 2009-08-03 12:24:31

回答

2

還沒有執行,以驗證是肯定的,但是這應該讓你最那裏的方式:

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 
    ) 

其中「MatchingCardEventDate」將是NULL對於那些沒有實際事件的記錄。對於實際事件,「MatchingCardEventDate」的值將是有效日期。

希望這會有所幫助。

2

不問你的數據模型,爲了得到你想要的結果,你將需要第三個表(我將調用日期)你需要表1和日期的交叉連接,這將給所有員工的結果天。然後你需要左連接到EmpID和日期。 左連接將包含來自第一個連接的所有結果,但僅填充來自表2的匹配行。 Access在處理查詢結構方面很有趣,它也不支持SQL-92的語法,但它看起來如下所示。

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;