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.