2014-01-27 82 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不知道什么是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” 是该块内定义的别名:现在

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) 
) 

,作为连接ON t.queue_id = q.id是otside该块(括号外),则别名“t”在该点不可用。

因此错误。

+0

我把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 .CREATE_TIME在SYSDATE -120和SYSDATE之间 GROUP BY TRUNC(t.CREATE_TIME) )o ON d.DTIME_DAY = o.REPORT_DATE但我仍然有错误 – user3098728

+0

我已经进一步解释了我的答案。希望你明白这一点。 查询是由您或其他人撰写的?因为如果你有,那么我怀疑你需要首先理解编程范围的一些基本概念。 – Arnab