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.