Workorderstep2表结构。                      
                
NAME ISNULL TYPE                                    
WORKORDER_GUID Y CHAR(36)
WORKORDERSTEP_GUID N CHAR(36)
OLDHANDLEBY_ID Y CHAR(6)
OLDHANDLEGROUP_ID Y CHAR(6)
HANDLEBY_ID Y CHAR(6)
HANDLEGROUP_ID Y CHAR(6)
WORKORDERSTEPSTATUS Y CHAR(6)
COMMENTS Y VARCHAR2(1024)
handleby_id     Y       VARCHAR2(6)
MODIFIEDDATE Y DATE(7)
WORKORDERSTEPID Y CHAR(6)
STEPEXPIRED Y DATE(7)workorder2表结构:
NAME    ISNULL  TYPE
WORKORDER_GUID  N       CHAR(36)
CURSTEPCOMMENTS Y       VARCHAR2(3000)
CREATEDBY       Y       CHAR(6)
CREATEDDATE     Y       DATE(7)
MODIFIEDBY      Y       CHAR(6)
MODIFIEDDATE    Y       DATE(7)
其中workorder2和workorderstep2的两个表的关系是一对多的关系,即workorder2.workorder_guid在workorderstep2表的workorder_guid可以出现多次。但是workorderstep2表的workorderstep_guid是唯一的。而且workorder2表的workorder_guid也是唯一的。现在想编写一条SQL语句:即想得到主表的workorder_guid在workorderstep2表的最近一次修改时间的COMMENTS字段的值和主表的handleby_id,CURSTEPCOMMENTS 的字段的值?请问这样的一对多的SQL语句该怎么写?

解决方案 »

  1.   

    select a.handleby_id,a.CURSTEPCOMMENTS,
           max(b.COMMENTS) keep(dense_rank last order by MODIFIEDDATE) comments
    from   workorder2 a, Workorderstep2 b
    where  a.WORKORDER_GUID=b.WORKORDER_GUID
    group  by a.handleby_id,a.CURSTEPCOMMENTS
      

  2.   

    keep(dense_rank last order by b.MODIFIEDDATE) 
      

  3.   

    SELECT A.workorder_guid,A.handleby_id,A.CURSTEPCOMMENTS,B.COMMENTS
    FROM workorder2 A,
    Workorderstep2 B,
    (SELECT workorder_guid,MAX(MODIFIEDDATE) MODIFIEDDATE 
    FROM Workorderstep2 GROUP BY workorder_guid) C
    WHERE A.workorder_guid=B.workorder_guid AND A.workorder_guid=C.workorder_guid 
    AND B.MODIFIEDDATE=C.MODIFIEDDATE