Oracle
 sql >> Baza danych >  >> RDS >> Oracle

ORA-00904 Nieprawidłowy identyfikator” dla identyfikatora w grupie według klauzuli

Nie możesz odwoływać się do aliasu kolumny na tym samym poziomie SQL, z wyjątkiem order by klauzula.

Z dokumentacji (podkreślenie dodane):

Możesz użyć aliasu kolumny, c_alias , aby nadać etykietę bezpośrednio poprzedzającemu wyrażeniu na liście wyboru, tak aby kolumna była wyświetlana z nowym nagłówkiem. Alias ​​skutecznie zmienia nazwę elementu listy wyboru na czas trwania zapytania. Alias ​​może być używany w ORDER BY klauzula, ale nie inne klauzule w zapytaniu .

Kiedy odwołujesz się do QTYLIV w GROUP BY Klauzula, że ​​lista wyboru nie została jeszcze oceniona, a alias nie istnieje. W ten sposób zapytanie jest analizowane i wykonywane.

Gdy na liście zaznaczeń znajdują się skomplikowane wyrażenia, często najprościej jest umieścić je w zewnętrznym zaznaczeniu, a następnie przeprowadzić grupowanie:

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 ;

Zauważ, że nie używasz oryginalnych aliasów tabeli w GROUP BY lub ORDER BY klauzule w zewnętrznym zaznaczeniu, ponieważ nie są one już objęte zakresem.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tworzenie lub symulacja dwuwymiarowych tablic w PL/SQL

  2. Funkcja DECOMPOSE() w Oracle

  3. Funkcja LEAST() w Oracle

  4. Jaki jest idealny zestaw narzędzi do programowania w PL/SQL?

  5. Jak automatycznie wygenerować tożsamość dla bazy danych Oracle za pomocą frameworka Entity?