1

以下查询返回“ORA-00904 错误:SATIS:标识符无效”。当我删除该行时HAVING satis > 0,它可以工作。我该怎么办?

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
4

3 回答 3

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
于 2010-02-10T07:48:42.767 回答
4

从这里:

http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_10002.htm

别名可以在 order_by_clause 中使用,但不能在查询中的其他子句中使用。

于 2010-02-10T07:54:57.650 回答
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 子句中使用别名。

于 2010-02-10T07:47:49.353 回答