Anda tidak dapat merujuk ke alias kolom di tingkat SQL yang sama, kecuali dalam order by klausa.
Dari dokumentasi (penekanan ditambahkan):
Anda dapat menggunakan alias kolom, c_alias , untuk melabeli ekspresi yang mendahuluinya dalam daftar pilih sehingga kolom ditampilkan dengan judul baru. Alias secara efektif mengganti nama item daftar pilih selama kueri. Alias dapat digunakan di
ORDER BYklausa, tetapi bukan klausa lain dalam kueri .
Saat Anda merujuk ke QTYLIV di GROUP BY karena daftar pilih belum dievaluasi dan alias tidak ada. Beginilah cara kueri diuraikan dan dijalankan.
Ketika Anda memiliki ekspresi yang rumit dalam daftar pilih, seringkali paling sederhana untuk membungkusnya dengan pilihan luar dan melakukan pengelompokan setelahnya:
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 ;
Perhatikan bahwa Anda tidak menggunakan alias tabel asli di GROUP BY atau ORDER BY klausa di pilihan luar, karena itu tidak lagi dalam cakupan.