sql >> Databáze >  >> RDS >> Oracle

ORA-00904 Neplatný identifikátor” pro identifikátor ve skupině podle klauzule

Nemůžete odkazovat na alias sloupce ve stejné úrovni SQL, s výjimkou order by doložka.

Z dokumentace (zvýraznění přidáno):

Můžete použít alias sloupce c_alias , chcete-li označit bezprostředně předcházející výraz ve výběrovém seznamu, aby se sloupec zobrazil s novým záhlavím. Alias ​​efektivně přejmenuje položku seznamu výběru po dobu trvání dotazu. Alias ​​lze použít v ORDER BY klauzule, ale ne ostatní klauzule v dotazu .

Když odkazujete na QTYLIV v GROUP BY klauzule, výběrový seznam ještě nebyl vyhodnocen a alias neexistuje. Takto je dotaz analyzován a proveden.

Pokud máte ve výběrovém seznamu složité výrazy, je často nejjednodušší je zabalit do vnějšího výběru a seskupení provést až poté:

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 ;

Všimněte si, že v GROUP BY nepoužíváte původní aliasy tabulek nebo ORDER BY klauzule ve vnějším výběru, protože ty již nejsou v rozsahu.



  1. PGError:ERROR:povolení odepřeno pro vztah (při použití Heroku)

  2. Volání uložené procedury s parametrem v c#

  3. Jak nainstalovat Oracle SQL Developer 18.2 na Windows 10?

  4. SQL:Opakujte řádek s výsledkem několikrát a očíslujte řádky