Nie możesz odwoływać się do aliasu kolumny na tym samym poziomie SQL, z wyjątkiem order by
klauzula.
Z dokumentacji (podkreślenie dodane):
Możesz użyć aliasu kolumny, c_alias , aby nadać etykietę bezpośrednio poprzedzającemu wyrażeniu na liście wyboru, tak aby kolumna była wyświetlana z nowym nagłówkiem. Alias skutecznie zmienia nazwę elementu listy wyboru na czas trwania zapytania. Alias może być używany w ORDER BY
klauzula, ale nie inne klauzule w zapytaniu .
Kiedy odwołujesz się do QTYLIV
w GROUP BY
Klauzula, że lista wyboru nie została jeszcze oceniona, a alias nie istnieje. W ten sposób zapytanie jest analizowane i wykonywane.
Gdy na liście zaznaczeń znajdują się skomplikowane wyrażenia, często najprościej jest umieścić je w zewnętrznym zaznaczeniu, a następnie przeprowadzić grupowanie:
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 ;
Zauważ, że nie używasz oryginalnych aliasów tabeli w GROUP BY
lub ORDER BY
klauzule w zewnętrznym zaznaczeniu, ponieważ nie są one już objęte zakresem.