2009-05-01 58 views
1

雖然實際的模式有點複雜,但下面應該對我來說更容易一些。在一個查詢中返回來自同一個表的兩個不同記錄的部分

在一個表我的工作清單:

 
Job Status Open date Close date 
1  Closed 04/29/2009 04/30/2009 
2  Open  04/30/2009 
3  Open  04/30/2009 

..和在另一個我有與工作相關聯的筆記列表:

 
ID Job Type Date  Text 
1 1  Open  04/29/2009 Please fix my printer 
2 1  Close 04/30/2009 Printer fixed 
3 2  Open  04/30/2009 Please fix my monitor 
4 2  Update 04/30/2009 Part required 
5 3  Open  05/01/2009 Please fix my mouse 

每個職業都會有一個「打開「筆記,可選擇一個或多個」更新「筆記,以及可選的」關閉「筆記。 Job字段顯然有一對多的關係。

我想吃點什麼是返回的工作列表,開放日,開放筆記和,如果存在的話,閉注,像這樣一個查詢:

 
Job Status Open date Open note    Close note 
1  Closed 04/29/2009 Please fix my printer Printer fixed 
2  Open  04/30/2009 Please fix my monitor 
3  Open  04/30/2009 Please fix my mouse 

我在嘗試這樣做總是失敗,因爲我結束了以下內容:

 
Job Status Open date Open note    Close note 
1  Closed 04/29/2009 Please fix my printer 
1  Closed 04/29/2009       Printer fixed 
2  Open  04/30/2009 Please fix my monitor 
2  Open  04/30/2009 
3  Open  05/01/2009 Please fix my mouse 
3  Open  05/01/2009 

..或者:

 
Job Status Open date Open note    Close note 
1  Closed 04/29/2009 Please fix my printer 
1  Closed 04/29/2009       Printer fixed 
2  Open  04/30/2009 Please fix my monitor 
3  Open  05/01/2009 Please fix my mouse 

我使用SQL在艾策斯s 2003,儘管最終的查詢將通過ADO從Excel前端查詢,但我現在只想從Access中獲取此工作。

回答

7

什麼1800信息表示,但不會沒有謂語正常工作,以限制聯接打開和關閉分別筆記,:

select a.job, a.status, a.opendate, 
     b.note as opennote, c.note as closenote 
from job a 
    join note b on (a.job = b.job and b.type = 'Open') 
    left outer join note c on (a.job = c.job and c.type = 'Closed'); 
+0

美麗,這很好地適合我的現實生活中的例子。 – Lunatik 2009-05-01 11:15:55

0

本質上,您需要使用Job表作爲查詢的驅動表,然後有兩個連接到Note表。第一個連接是「打開」註釋的內部連接 ​​- 它是內部連接,因爲總會有一個打開的註釋。第二個連接是「關閉」註釋的外部連接,因爲可能沒有結束註釋。類似這樣的:

select job.job, status, opendate, opennote.note, closenote.note from 
    job left inner join note opennote on opennote.job = job.job 
     left outer join note closenote on closenote.job = job.job 

也許訪問語法稍微或大不相同,但這是一般的想法。

0

當我創建的命令由tpdi提出的解決方案工作Access,但是當我嘗試編輯它時拋出了「不支持連接的表達式」的晃動,或者通過Excel中的ADODB運行查詢。

關閉MDB並重新打開足以讓我再次運行它,但只要我試圖在SQL或QBE視圖中查看/編輯它,它就會開始拋出異常。最終,我無法打開或編輯查詢,即使在「緊湊的&修復」之後 - 大概是某種內部腐敗的問題。

奇怪的是,我能夠通過引用查詢(SELECT * FROM noteReport;) - 它很奇怪。看起來我最初的成功是一種僥倖,因爲我無法重新創建確切的查詢並重新運行。

然而,我最終能與以下複製所需的報表:

SELECT a.callReference, b.callPriority, datevalue(INT(a.openedDT)), 
    b.callerFirstName & ' ' & b.callerSurname AS Caller, c.noteText, d.noteText 
FROM ((tblMain AS a 
    INNER JOIN tblCalldetails AS b ON a.callreference=b.callReference) 
    LEFT JOIN tblNotes AS c ON a.callReference=c.callReference) 
    LEFT JOIN tblNotes AS d ON a. callReference =d.callReference 
WHERE a.status = 'Closed' 
    AND c.noteType='Open' 
    AND d.noteType='Closing' 
    AND INT(a.closedDT) = #5/1/2009#; 

張貼這在這裏不亞於我爲任何其他人可以通過谷歌找到這樣做的好處。

相關問題