SQL文~求高手来~解决思路

SQL文~求高手来~~~~~~~~~~~~~~~~~~~~~~现在有两个表一个主表是 考勤信息表SQL codeCREATE TABLE HIPS_HR.H

SQL文~求高手来~~~~~~~~~~~~~~~~~~~~~~
现在有两个表
一个主表是 考勤信息表

SQL code
CREATE TABLE HIPS_HR.HR_WORK_ATTEND(    PERSONNEL_ID                   VARCHAR2(10) NOT NULL,    FREQUENCY                      VARCHAR2(10) NOT NULL,    WORKDAY                        VARCHAR2(8) NOT NULL,    WORKTIME                       DATE,    CLOSETIME                      DATE,    OVERTIMEFLG                    CHAR(1) NOT NULL,    UPDATE_TIME                    DATE,    UPDATE_USERID                  VARCHAR2(20),    CREATE_TIME                    DATE,    CREATE_USERID                  VARCHAR2(20),    EXCLUSIVEKEY                   VARCHAR2(100),    CONSTRAINT WORK_ATTEND_KEY PRIMARY KEY (PERSONNEL_ID, WORKDAY, FREQUENCY) USING INDEX        PCTFREE 10        INITRANS 2        MAXTRANS 255        TABLESPACE USERS        STORAGE(INITIAL 64K MINEXTENTS 1 MAXEXTENTS 2147483645 BUFFER_POOL DEFAULT)        LOGGING)PCTFREE 10MAXTRANS 255TABLESPACE USERSSTORAGE(INITIAL 64K MINEXTENTS 1 MAXEXTENTS 2147483645 BUFFER_POOL DEFAULT)NOCACHELOGGING/COMMENT ON TABLE HIPS_HR.HR_WORK_ATTEND IS '考勤信息表'/COMMENT ON COLUMN HIPS_HR.HR_WORK_ATTEND.PERSONNEL_ID IS '员工ID'/COMMENT ON COLUMN HIPS_HR.HR_WORK_ATTEND.FREQUENCY IS '班次'/COMMENT ON COLUMN HIPS_HR.HR_WORK_ATTEND.WORKDAY IS '工作日'/COMMENT ON COLUMN HIPS_HR.HR_WORK_ATTEND.WORKTIME IS '上班时间'/COMMENT ON COLUMN HIPS_HR.HR_WORK_ATTEND.CLOSETIME IS '下班时间'/COMMENT ON COLUMN HIPS_HR.HR_WORK_ATTEND.OVERTIMEFLG IS '是否加班  1:是  0:不是'/COMMENT ON COLUMN HIPS_HR.HR_WORK_ATTEND.UPDATE_TIME IS '更新时间'/COMMENT ON COLUMN HIPS_HR.HR_WORK_ATTEND.UPDATE_USERID IS '更新者'/COMMENT ON COLUMN HIPS_HR.HR_WORK_ATTEND.CREATE_TIME IS '创建时间'/COMMENT ON COLUMN HIPS_HR.HR_WORK_ATTEND.CREATE_USERID IS '创建者'/COMMENT ON COLUMN HIPS_HR.HR_WORK_ATTEND.EXCLUSIVEKEY IS '排他键'/


还有一个是请假表
SQL code
CREATE TABLE HIPS_HR.HR_LEAVE(    LEAVE_ID                       VARCHAR2(15) NOT NULL,    PERSONNEL_ID                   VARCHAR2(50),    FREQUENCY                      VARCHAR2(10),    LEAVE_DATE                     DATE,    LEAVE_LENGTH_DAY               NUMBER(10,0),    LEAVE_LENGTH_HOUR              NUMBER(10,0),    LEAVE_LENGTH_MIN               NUMBER(10,0),    LEAVE_KSSJ                     DATE,    LEAVE_JSSJ                     DATE,    LEAVE_TYPE                     VARCHAR2(5),    LEAVE_REASON                   VARCHAR2(200),    STATUS                         VARCHAR2(200),    UPDATE_TIME                    DATE,    UPDATE_USERID                  VARCHAR2(20),    CREATE_TIME                    DATE,    CREATE_USERID                  VARCHAR2(20),    EXCLUSIVEKEY                   VARCHAR2(100) NOT NULL,    CONSTRAINT HR_LEAVE_PK PRIMARY KEY (LEAVE_ID) USING INDEX        PCTFREE 10        INITRANS 2        MAXTRANS 255        TABLESPACE USERS        STORAGE(INITIAL 64K MINEXTENTS 1 MAXEXTENTS 2147483645 BUFFER_POOL DEFAULT)        LOGGING)PCTFREE 10MAXTRANS 255TABLESPACE USERSSTORAGE(INITIAL 64K MINEXTENTS 1 MAXEXTENTS 2147483645 BUFFER_POOL DEFAULT)NOCACHELOGGING/COMMENT ON TABLE HIPS_HR.HR_LEAVE IS '员工请假表'/COMMENT ON COLUMN HIPS_HR.HR_LEAVE.LEAVE_ID IS '请假编号'/COMMENT ON COLUMN HIPS_HR.HR_LEAVE.PERSONNEL_ID IS '用户ID'/COMMENT ON COLUMN HIPS_HR.HR_LEAVE.FREQUENCY IS '班次'/COMMENT ON COLUMN HIPS_HR.HR_LEAVE.LEAVE_DATE IS '请假日期'/COMMENT ON COLUMN HIPS_HR.HR_LEAVE.LEAVE_LENGTH_DAY IS '请假时长(天)'/COMMENT ON COLUMN HIPS_HR.HR_LEAVE.LEAVE_LENGTH_HOUR IS '请假时长(小时)'/COMMENT ON COLUMN HIPS_HR.HR_LEAVE.LEAVE_LENGTH_MIN IS '请假时长(分钟)'/COMMENT ON COLUMN HIPS_HR.HR_LEAVE.LEAVE_KSSJ IS '请假开始时间'/COMMENT ON COLUMN HIPS_HR.HR_LEAVE.LEAVE_JSSJ IS '请假结束时间'/COMMENT ON COLUMN HIPS_HR.HR_LEAVE.LEAVE_TYPE IS '请假类型'/COMMENT ON COLUMN HIPS_HR.HR_LEAVE.LEAVE_REASON IS '请假事由'/COMMENT ON COLUMN HIPS_HR.HR_LEAVE.STATUS IS '单据状态'/COMMENT ON COLUMN HIPS_HR.HR_LEAVE.UPDATE_TIME IS '更新时间'/COMMENT ON COLUMN HIPS_HR.HR_LEAVE.UPDATE_USERID IS '更新者'/COMMENT ON COLUMN HIPS_HR.HR_LEAVE.CREATE_TIME IS '创建时间'/COMMENT ON COLUMN HIPS_HR.HR_LEAVE.CREATE_USERID IS '创建者'/COMMENT ON COLUMN HIPS_HR.HR_LEAVE.EXCLUSIVEKEY IS '排他键(使用UUID进行排他)'/ 



现在查询想实现的是 

查询到一条考勤信息的时候 

那天是否请假了(对应的ID在有假条的开始结束时间内包含这一天) 并且把请假的时间计算出来

我现在写的语句left join过后会重复 、 也不知道怎么算请假时长

这个是我现在用的SQL文{用的是ibatis} SSI的框架

SQL code
 <!--考勤信息检索-->    <select id="searchAttendInfo" parameterClass="AttenceEntity" resultClass="WorkAttendEntity">            select                     workAttend.PERSONNEL_ID                  as    personnelId,                    personnel.ATTENCE_ID                     as    attenceId,                    personnel.PERSONNEL_NAME                 as    personnelName,                    workAttend.WORKDAY                       as    workDay,                    workAttend.FREQUENCY                     as    frequency,                    workAttend.WORKTIME                      as    workTime,                    workAttend.CLOSETIME                     as    closeTime,                    workAttend.OVERTIMEFLG                   as    overTimeFlg,                    leave.LEAVE_ID                           as    isLeave            from                HR_WORK_ATTEND workAttend                left join HR_PERSONNEL personnel on personnel.PERSONNEL_ID = workAttend.PERSONNEL_ID                left join (select count(LEAVE_ID) as LEAVE_ID,PERSONNEL_ID,LEAVE_KSSJ,LEAVE_JSSJ from hr_leave                            group by PERSONNEL_ID,LEAVE_KSSJ,LEAVE_JSSJ) leave                            on <![CDATA[workAttend.WORKDAY >= to_char(leave.LEAVE_KSSJ, 'YYYYMMDD')]]>                           and <![CDATA[workAttend.WORKDAY <= to_char(leave.LEAVE_JSSJ, 'YYYYMMDD')]]>                            and leave.PERSONNEL_ID = workAttend.PERSONNEL_ID            <dynamic prepend="where">              <isNotEmpty prepend="and" property="personnelName">                  personnel.PERSONNEL_NAME like '%'||#personnelName#||'%'                </isNotEmpty>               <isNotEmpty prepend="and" property="attendYear">                  workAttend.WORKDAY like #attendYear#||'%'                </isNotEmpty>                 <isNotEmpty prepend="and" property="attendMonth">                  substr(workAttend.WORKDAY,5,2) =#attendMonth#                </isNotEmpty>                 <isNotEmpty prepend="and" property="attendDay">                  substr(workAttend.WORKDAY,7,2) =#attendDay#                </isNotEmpty>              <isNotEmpty prepend="and" property="personnelId">                  workAttend.PERSONNEL_ID = #personnelId#                </isNotEmpty>                 <isNotEmpty prepend="and" property="attenceId">                  personnel.ATTENCE_ID = #attenceId#                </isNotEmpty>           </dynamic>           order by workAttend.PERSONNEL_ID,workAttend.WORKDAY    </select>


求指点~感激不尽、分不多见谅

[解决办法]
在查询个员工一条考勤记录时,要确定当天该员工是否请假,如果请假了要计算出请假时长?
是这个意思不?
[解决办法]
一天请假好几次,应该是请假表有好几条记录吧,而不是你说的考勤表吧?