2016-10-08 72 views
-3
SELECT E.EMPNO,E.DEPTNO,E.SAL,E.COMM, 
COALESCE(SAL,0)+COALESCE(COMM,0) AS T1, 
CASE 
WHEN E.DEPTNO=10 THEN COALESCE(E.SAL,0)+COALESCE(E.COMM,0) 
WHEN D.DNAME='ACCOUNTING' THEN COALESCE(E.SAL,0)-COALESCE(E.COMM,0) 
ELSE 0 END AS T, 
sum(T+T1) as T2 

FROM EMP E LEFT OUTER JOIN DEPT D ON E.DEPTNO=D.DEPTNO; 

得到如下錯誤:如何總結別名列case語句在SQL

ORA-00904: "T1": invalid identifier 00904. 00000 - "%s: invalid identifier" *Cause:
*Action: Error at Line: 7 Column: 7

+0

有可能是區分大小寫的問題。你檢查了嗎? –

+1

爲什麼所有的downvotes?問題很明顯,我們有所有的細節,完整的錯誤信息,完整的背景......該死的野人。 – mathguy

回答

0

不能使用在select條款定義的別名,而同樣select子句中的其他地方引用它們。

這意味着sum(T+T1)無效,因爲TT1將不被識別。

一個解決辦法是將你的查詢派生表內,那麼你可以參考TT1在外部查詢:

SELECT x.*, 
     sum(x.T+x.T1) as T2 
    FROM (SELECT E.EMPNO, 
       E.DEPTNO, 
       E.SAL, 
       E.COMM, 
       COALESCE(SAL,0)+COALESCE(COMM,0) AS T1, 
       CASE 
       WHEN E.DEPTNO=10 THEN COALESCE(E.SAL,0)+COALESCE(E.COMM,0) 
       WHEN D.DNAME='ACCOUNTING' THEN COALESCE(E.SAL,0)-COALESCE(E.COMM,0) 
       ELSE 0 
       END AS T, 
      FROM EMP E 
      LEFT OUTER JOIN DEPT D 
      ON E.DEPTNO=D.DEPTNO) x 
+0

我的目標表有T,T1和T2列,我想要使用case語句來比較源,目標能夠列數據。我的要求說T + t1只應該是T2。有沒有什麼解決辦法。請在這裏幫助我。 –

+0

對不起,您的後續評論不清楚。但根據你原來的問題/問題,我認爲我的答案提供了一個可接受的解決方法。去嘗試一下。 – sstan