sql >> Databasteknik >  >> RDS >> Oracle

ORA-00904 Invalid identifier” för en identifierare i en group by-sats

Du kan inte hänvisa till ett kolumnalias i samma SQL-nivå, förutom i order by klausul.

Från dokumentationen (min kursivering):

Du kan använda ett kolumnalias, c_alias , för att märka det omedelbart föregående uttrycket i urvalslistan så att kolumnen visas med en ny rubrik. Aliaset byter i praktiken namn på den valda listposten under hela frågans varaktighet. Aliaset kan användas i ORDER BY sats, men inte andra satser i frågan .

När du hänvisar till QTYLIV i GROUP BY förutsatt att urvalslistan inte har utvärderats ännu och aliaset finns inte. Det är bara så frågan tolkas och exekveras.

När du har komplicerade uttryck i urvalslistan är det ofta enklast att slå in det i en yttre markering och göra grupperingen efteråt:

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 ;

Observera att du inte använder de ursprungliga tabellaliasen i GROUP BY eller ORDER BY satser i det yttre urvalet, eftersom de inte längre är i omfattning.



  1. Hur söker man efter ett specifikt värde i alla tabeller (PostgreSQL)?

  2. SQLite-data till en RecyclerView

  3. Hur man kopierar en enorm tabelldata till en annan tabell i SQL Server

  4. Hur fyller man i hålen i fälten för automatisk ökning?