Не можете да се позовавате на псевдоним на колона в същото ниво на SQL, освен в order by
клауза.
От документацията (ударението е добавено):
Можете да използвате псевдоним на колона, c_alias , за да маркирате непосредствено предходния израз в списъка за избор, така че колоната да се показва с ново заглавие. Псевдонимът ефективно преименува избрания елемент от списъка за продължителността на заявката. Псевдонимът може да се използва в
ORDER BY
клауза, но не и други клаузи в заявкатата .
Когато се позовавате на QTYLIV
в GROUP BY
cluase списъкът за избор все още не е оценен и псевдонимът не съществува. Точно така се анализира и изпълнява заявката.
Когато имате сложни изрази в списъка за избор, често е най-лесно да го обвиете във външен избор и след това да извършите групирането:
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 ;
Забележете, че не използвате оригиналните псевдоними на таблицата в GROUP BY
или ORDER BY
клаузи във външния избор, тъй като те вече не са в обхвата.