SELECT * FROM
(
SELECT
A.L_UID
,A.C_NAME, A.C_ORG, A.C_TEAM, A.C_SUB_TEAM, A.C_TITLE, A.C_SHIFT
, B.C_DATE, MIN(DECODE(L_MODE, '1', C_TIME)) ATTENT, MAX(DECODE(L_MODE, '2', C_TIME)) LEAVE
, ROUND(TRUNC(TO_DATE(MIN(DECODE(L_MODE, '2', C_DATE||C_TIME)), 'yyyymmddHH24MISS') -
TO_DATE(MIN(DECODE(L_MODE, '1', C_DATE||C_TIME)), 'yyyymmddHH24MISS'),6)*24) AS W_HOURS
FROM RUS_TEST.IF_FINGER_EMPLOYEE A, RUS_TEST.IF_FINGER B
WHERE A.L_UID = B.L_UID(+)
AND B.C_DATE(+) BETWEEN '20110901' AND '20110902'
GROUP BY A.L_UID, A.C_NAME, A.C_ORG, A.C_TEAM, A.C_SUB_TEAM, A.C_TITLE, A.C_SHIFT, B.C_DATE
)
WHERE C_ORG LIKE '%'
AND UPPER(C_SUB_TEAM) LIKE '%' ||'%'
AND C_SHIFT LIKE '%'
AND C_DATE IS NOT NULL
안녕하십니까. 근태 쿼리를 하다가 안되는게 있어서 도움을 받고자 글을 올립니다.
위의 쿼리를 실행하면 아래의 결과 가 나옵니다.
L_UID C_NAME C_ORG C_TEAM C_SUB_TEAM C_TITLE C_SHIFT C_DATE ATTENT LEAVE W_HOURS
567 A AA AAA AAAA AAAA B 20110901 074808 075343 0
303 B BB BBB BBBB BBBB A 20110901 025304 074857 1
959 C CC CCC CCCC CCCC C 20110901 221920 075017 -20
739 D DD DDD DDDD DDDD B 20110901 025649 075134 5
906 E EE EEE EEEE EEEE A 20110901 152449 224939 4
.
.
나머지는 해당 일에 정상적인 시간계산결과가 나오는데 문제점이 9월1일 밤 10시에 시작하여 9월2일 아침 7시에 일이끝나다보니
그룹으로 묶는과정에서 9월1일로 묶이고 결과가 -20 이 나옵니다.
어떻게 하면 정상적인 결과를 볼수 있을지 도움 부탁드립니다.
감사합니다.
|