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 BY
klausa, 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.