在一个查询中返回同一表中两个不同记录的部分

Lun*_*tik 1 sql ms-access

虽然实际架构有点复杂,但以下内容对我来说应该更容易理解.

在一张桌子中,我有一份工作清单:

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

我在Access 2003中使用SQL,虽然最终的查询将来自Excel前端的ADO,但我现在只想在Access中使用它.

tpd*_*pdi 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');
Run Code Online (Sandbox Code Playgroud)