2015-03-18 2 views
0

Как работает группа в oracle? Я пытался часами, и я до сих пор не знаю, почему я получаю эту ошибку. Оригинальный sql написан повсеместно. Я пытаюсь преобразовать его в оракул.Группа В Oracle

Ошибка я получаю:

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

Это мой запрос:

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; 
+0

У вас есть 'AND' слишком много на предыдущей строке. – Guffa

+0

Это была просто опечатка при написании этого сообщения. – User456789

ответ

3

Вы не можете группы на выходное значение. Повторите выражение:

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; 

Альтернативно, вычислить значение в подзапрос и группе результат от:

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 
Смежные вопросы