2014-01-27 4 views
0

LEFT JOIN을 사용하여 3 개의 테이블을 조인하려하지만 항상 오류가 있습니다. 도와주세요.3 테이블에서 왼쪽 조인 사용

Name   Date    Open    Close 
POS    01/01/2014   4     10 
ONE    01/02/2014   6     5 
... 
... 
... 

내 쿼리 :

SELECT 'Data' 
||','||TO_CHAR(D.DTIME_DAY,'MM/dd/yyyy') 
||','||NVL(o.CNT_OPENED,0) --as cnt_opened 
||','||NVL(c.CNT_CLOSED,0) --as cnt_closed 
||','||q.NAME 
FROM OWNER_DWH.DC_DATE d 
LEFT JOIN APP_ACCOUNT.OTRS_QUEUE q 
ON t.queue_id = q.id 
LEFT JOIN (
SELECT TRUNC(t.CREATE_TIME) AS report_date,count(*) AS cnt_opened 
FROM APP_ACCOUNT.OTRS_TICKET t 
WHERE t.CREATE_TIME BETWEEN SYSDATE -120 AND SYSDATE 
GROUP BY TRUNC(t.CREATE_TIME) 
) o ON d.DTIME_DAY=o.REPORT_DATE 
LEFT JOIN (
SELECT TRUNC(t.CLOSE_TIME) as report_date,count(*) AS cnt_closed 
FROM APP_ACCOUNT.OTRS_TICKET t 
WHERE t.CLOSE_TIME BETWEEN SYSDATE -120 AND SYSDATE 
GROUP BY TRUNC(t.CLOSE_TIME) 
) c ON D.DTIME_DAY=c.REPORT_DATE 
WHERE d.DTIME_DAY BETWEEN SYSDATE -120 AND TRUNC(SYSDATE) -1 
AND d.DTIME_DAY = TRUNC(d.DTIME_DAY) 
AND TRUNC(d.DTIME_DAY)= d.DTIME_DAY 
ORDER BY D.DTIME_DAY; 
+0

8 행에서';'를 제거하고'ON t.queue_id = q.id'를 시도하십시오 – Dba

+0

오류가 있습니까? – wruckie

+0

ORA-00904 : "T". "QUEUE_ID": 잘못된 식별자 @wruckie – user3098728

답변

1

당신은 가입 첫 번째 왼쪽에 "T"에 대한 모든 테이블 별칭을 가지고 있겠지을

당신에게

내가 원하는 출력을 감사드립니다. 따라서 oracle은 아직 join 상태 인 t.queue_id에서 "t"가 무엇인지 알지 못합니다.

ON t.queue_id = q.id. 코드에서

:

SELECT 'Data' 
||','||TO_CHAR(D.DTIME_DAY,'MM/dd/yyyy') 
||','||NVL(o.CNT_OPENED,0) --as cnt_opened 
||','||NVL(c.CNT_CLOSED,0) --as cnt_closed 
||','||q.NAME 
FROM OWNER_DWH.DC_DATE d 
LEFT JOIN APP_ACCOUNT.OTRS_QUEUE q 
ON t.queue_id = q.id 
LEFT JOIN (
SELECT TRUNC(t.CREATE_TIME) AS report_date,count(*) AS cnt_opened 
FROM APP_ACCOUNT.OTRS_TICKET t 
WHERE t.CREATE_TIME BETWEEN SYSDATE -120 AND SYSDATE 
GROUP BY TRUNC(t.CREATE_TIME) 
) 

"t"는 블록 내부에 정의 된 별칭 다음 ON t.queue_id = q.id 가입으로,

LEFT JOIN ( 
SELECT TRUNC(t.CREATE_TIME) AS report_date,count(*) AS cnt_opened 
FROM APP_ACCOUNT.OTRS_TICKET t 
WHERE t.CREATE_TIME BETWEEN SYSDATE -120 AND SYSDATE 
GROUP BY TRUNC(t.CREATE_TIME) 
) 

지금은 (괄호 밖에서)이 블록과 otside되면, 별칭 "t"는 해당 시점에서 사용할 수 없습니다.

따라서 오류가 발생했습니다.

+0

.CREATE_TIME SYSDATE -120 및 SYSDATE GROUP BY TRUNC (t.CREATE_TIME) ) o d.DTIME_DAY = o.REPORT_DATE.하지만 여전히 오류가 있습니다. – user3098728

+0

답변을 추가로 설명했습니다. 당신이 요점을 얻길 바랍니다. 귀하 또는 다른 누군가가 작성한 질문입니까? 왜냐하면 당신이 가진다면, 먼저 프로그래밍에서 스코핑의 기본 아이디어를 이해해야 할 필요가 있다고 생각합니다. – Arnab

관련 문제