2015-04-27 32 views
-1
select case when x.a in (select y.c from join2) then x.a end, x.b, x.c, y.a, z.c 
from join1 x, join2 y, join3 z where x.a = z.a 
group by x.a, x.b, x.c, y.a, z.c order by x.c; 

運行此查詢時,我得到的是按表達式分組的error ORA-00979。我已經嘗試過從組中刪除x.a,但仍然無法運行。任何機構都可以幫助我做到這一點。Oracle:未按表達式分組錯誤

回答

0

你需要在你的GROUP BY條款,而不是x.a這個表達式:

case when x.a in (select y.c from join2) then x.a end 

所以把他們放在一起:

SELECT CASE WHEN x.a IN (SELECT y.c FROM join2) THEN x.a END 
    , x.b, x.c, y.a, z.c 
    FROM join1 x, join2 y, join3 z 
WHERE x.a = z.a 
GROUP BY CASE WHEN x.a IN (SELECT y.c FROM join2) THEN x.a END 
    , x.b, x.c, y.a, z.c 
ORDER BY x.c; 

我必須指出,然而,你」重新進行xy之間的笛卡爾連接,並且不完全清楚爲什麼您使用GROUP BY,因爲沒有聚合。

+0

thanx大衛,但我需要一個更多的幫助。我喜歡用上面的查詢語句,選擇xa,xb,xc,ya,zc FROM join1 x,join2 y,join3 z WHERE xa = yc and xa = za GROUP BY xa,xb,xc,ya,zc ORDER BY xc;你能幫助我嗎? –

+0

我沒有看到任何立即錯誤的東西;如果你需要幫助,我會建議問一個新問題。 –