Oracle
 sql >> база данни >  >> RDS >> Oracle

ORA-00904 Невалиден идентификатор” за идентификатор в група по клауза

Не можете да се позовавате на псевдоним на колона в същото ниво на SQL, освен в order by клауза.

От документацията (ударението е добавено):

Можете да използвате псевдоним на колона, c_alias , за да маркирате непосредствено предходния израз в списъка за избор, така че колоната да се показва с ново заглавие. Псевдонимът ефективно преименува избрания елемент от списъка за продължителността на заявката. Псевдонимът може да се използва в ORDER BY клауза, но не и други клаузи в заявкатата .

Когато се позовавате на QTYLIV в GROUP BY cluase списъкът за избор все още не е оценен и псевдонимът не съществува. Точно така се анализира и изпълнява заявката.

Когато имате сложни изрази в списъка за избор, често е най-лесно да го обвиете във външен избор и след това да извършите групирането:

SELECT *
FROM (
  SELECT p.name AS design,
    p.M_PRODUCT_CATEGORY_ID,
    il.PRICEACTUAL   AS price,
    bp.C_BPARTNER_ID AS idpartner,
    CASE
  ...
    (SELECT qtyinvoiced
    FROM C_InvoiceLine il
    WHERE bp.ISCUSTOMER ='Y'
    AND bp.C_BPARTNER_ID= 18888
    )               AS qtyliv,
  ...
    i.DATEINVOICED AS dat
  FROM C_InvoiceLine il
  INNER JOIN M_PRODUCT p
  ...
  ON (oi.c_location_id=loc2.c_location_id)
    --WHERE i.DateInvoiced BETWEEN $P{Date1} AND $P{Date2}
    --AND
    --i.DocStatus in ('CO','CL')
    --AND i.IsSoTrx = 'Y'
    --AND   p.isstocked='Y'
)
GROUP BY name ,
  M_PRODUCT_CATEGORY_ID,
  QTYINVOICED,
  PRICEACTUAL,
...
  qtyliv,
  qtydepot
ORDER BY name ,
  dateinvoiced ;

Забележете, че не използвате оригиналните псевдоними на таблицата в GROUP BY или ORDER BY клаузи във външния избор, тъй като те вече не са в обхвата.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изявление FORALL с клауза INDICES-OF Bound в базата данни на Oracle

  2. Oracle PL/SQL групово събиране с пример за изключения за запазване

  3. Функция RPAD() в Oracle

  4. ORA-12704:несъответствие на набора от знаци

  5. Защо получавам PLS-00302:компонентът трябва да бъде деклариран, когато съществува?