Bạn không thể tham chiếu đến bí danh cột trong cùng một cấp SQL, ngoại trừ theo thứ tự order by
mệnh đề.
Từ tài liệu (đã thêm phần nhấn mạnh):
Bạn có thể sử dụng bí danh cột, c_alias , để gắn nhãn biểu thức ngay trước đó trong danh sách chọn để cột được hiển thị với một tiêu đề mới. Bí danh đổi tên hiệu quả mục danh sách đã chọn trong suốt thời gian truy vấn. Bí danh có thể được sử dụng trong
ORDER BY
mệnh đề, chứ không phải các mệnh đề khác trong truy vấn .
Khi bạn tham khảo QTYLIV
trong GROUP BY
vì danh sách lựa chọn chưa được đánh giá và bí danh không tồn tại. Đây chỉ là cách truy vấn được phân tích cú pháp và thực thi.
Khi bạn có các biểu thức phức tạp trong danh sách lựa chọn, thường đơn giản nhất là bọc nó trong một lựa chọn bên ngoài và thực hiện nhóm sau đó:
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 ;
Lưu ý rằng bạn không sử dụng bí danh bảng gốc trong GROUP BY
hoặc ORDER BY
các mệnh đề trong lựa chọn bên ngoài, vì chúng không còn trong phạm vi.