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.