1

The following query returns "ORA-00904 error: SATIS: Invalid identifier." When I remove the line HAVING satis > 0, it works. What should I do?

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
apaderno
  • 28,547
  • 16
  • 75
  • 90
Mehper C. Palavuzlar
  • 10,089
  • 23
  • 56
  • 69

3 Answers3

7

You can not use alias in conditions (having section of your query)

try this one:

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
odiseh
  • 25,407
  • 33
  • 108
  • 151
4

From here:

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

The alias can be used in the order_by_clause but not other clauses in the query.

davek
  • 22,499
  • 9
  • 75
  • 95
1

You need to change it to

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 

You cannot use the alias in the HAVING clause.

Adriaan Stander
  • 162,879
  • 31
  • 289
  • 284