sql >> Database teknologi >  >> RDS >> Oracle

ORA-00904 Ugyldig identifikator” for en identifikator i en gruppe efter klausul

Du kan ikke henvise til et kolonnealias i det samme SQL-niveau, undtagen i order by klausul.

Fra dokumentationen (fremhævet):

Du kan bruge et kolonnealias, c_alias , for at mærke det umiddelbart forudgående udtryk i valglisten, så kolonnen vises med en ny overskrift. Aliaset omdøber i praksis det udvalgte listeelement i forespørgslens varighed. Aliaset kan bruges i ORDER BY klausul, men ikke andre klausuler i forespørgslen .

Når du henviser til QTYLIV i GROUP BY forudsat at den valgte liste ikke er blevet evalueret endnu, og aliaset eksisterer ikke. Det er bare sådan, forespørgslen parses og udføres.

Når du har komplicerede udtryk i udvalgslisten, er det ofte nemmest at pakke det ind i et ydre udvalg og lave grupperingen bagefter:

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 ;

Bemærk, at du ikke bruger de originale tabelaliasser i GROUP BY eller ORDER BY klausuler i det ydre udvalg, da disse ikke længere er i omfanget.



  1. Hvad er de vigtigste ydelsesforskelle mellem varchar og nvarchar SQL Server-datatyper?

  2. <expr> forventet, fik '?'

  3. SQL Server 2017:Import af CSV-data fra Linux til Salesforce med SSIS

  4. LIKE vs CONTAINS på SQL Server