2010-02-10 112 views
1

以下查詢返回「ORA-00904錯誤:SATIS:無效的標識符」。當我刪除行HAVING satis > 0,它的工作。我該怎麼辦?這個SQL查詢有什麼問題?

SELECT donem, bolge_adi, sehir_tasra "1=Ş, 2=T", 
     COUNT(DISTINCT mekankodu) "M.SAYISI", 
     SUM(b2b_dagitim + b2b_transfer - b2b_iade) satis 
FROM mps_view2 
WHERE donem IN ('200612','200712','200812','200912') 
AND (ob IS NOT NULL OR b2b_ob IS NOT NULL) 
GROUP BY donem, bolge_adi, sehir_tasra 
HAVING satis > 0 
ORDER BY donem, bolge_adi, sehir_tasra 

回答

7

不能使用條件別名(有查詢的部分)

試試這個:

SELECT donem, bolge_adi, sehir_tasra "1=Ş, 2=T", 
    COUNT(DISTINCT mekankodu) "M.SAYISI", 
    SUM(b2b_dagitim + b2b_transfer - b2b_iade) satis 
FROM mps_view2 
WHERE donem IN ('200612','200712','200812','200912') 
     AND (ob IS NOT NULL OR b2b_ob IS NOT NULL) 
GROUP BY donem, bolge_adi, sehir_tasra 
HAVING SUM(b2b_dagitim + b2b_transfer - b2b_iade) > 0 
ORDER BY donem, bolge_adi, sehir_tasra 
+0

謝謝。我似乎很奇怪爲什麼Oracle會阻止這樣一個實際的事情...... – 2010-02-10 08:06:35

+0

@Mehper:這個規則在SQL Server和Oracle中很常見。 – odiseh 2010-02-10 09:39:42

1

您需要將其更改爲

SELECT donem, bolge_adi, sehir_tasra "1=Ş, 2=T", 
     COUNT(DISTINCT mekankodu) "M.SAYISI", 
     SUM(b2b_dagitim + b2b_transfer - b2b_iade) satis 
FROM mps_view2 
WHERE donem IN ('200612','200712','200812','200912') 
AND (ob IS NOT NULL OR b2b_ob IS NOT NULL) 
GROUP BY donem, bolge_adi, sehir_tasra 
HAVING SUM(b2b_dagitim + b2b_transfer - b2b_iade) > 0 
ORDER BY donem, bolge_adi, sehir_tasra 

HAVING子句中不能使用的別名。