简体   繁体   中英

Group By in Oracle

How is group by used in oracle? I have been trying for hours and I still dont know why i am getting this error. The original sql is written in pervasive. I am trying to convert it into oracle.

The error I am getting is :

ORA-00904: "SHA": invalid identifier
00904. 00000 -  "%s: invalid identifier"

This is my query:

SELECT 
  CASE 
    WHEN (pch + pk) > 999999999 
      THEN 'j-9999 and OVER' 
    WHEN (pch + pk) >= 1000000 
      THEN 'i-1, < 999'  
  END AS SHA,  
  SUM(pch + pk) AS TOTALSHA
FROM hold, pos  
WHERE  hold.ho = pos.pho AND (pch + pk) > 0 
GROUP BY SHA;

You can't group on an output value. Repeat the expression:

SELECT 
  CASE 
    WHEN (pch + pk) > 999999999 
      THEN 'j-9999 and OVER' 
    WHEN (pch + pk) >= 1000000 
      THEN 'i-1, < 999'  
  END AS SHA,  
  SUM(pch + pk) AS TOTALSHA
FROM hold, pos  
WHERE  hold.ho = pos.pho AND (pch + pk) > 0 
GROUP BY CASE 
    WHEN (pch + pk) > 999999999 
      THEN 'j-9999 and OVER' 
    WHEN (pch + pk) >= 1000000 
      THEN 'i-1, < 999'  
  END;

Alternatively, calculate the value in a subquery and group the result from that:

SELECT
  SHA,
  SUM(pch + pk) AS TOTALSHA
FROM (
  SELECT 
    CASE 
      WHEN (pch + pk) > 999999999 
        THEN 'j-9999 and OVER' 
      WHEN (pch + pk) >= 1000000 
        THEN 'i-1, < 999'  
    END AS SHA,  
    pch,
    pk
  FROM hold, pos  
  WHERE  hold.ho = pos.pho AND (pch + pk) > 0 
) AS X
GROUP BY SHA

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM