2010-02-10 113 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子句中不能使用的别名。