order by
を除いて、同じレベルのSQLで列エイリアスを参照することはできません。 条項。
ドキュメントから(強調を追加):
列エイリアスc_aliasを使用できます 、選択リストの直前の式にラベルを付けて、列が新しい見出しで表示されるようにします。エイリアスは、クエリの期間中、選択リストアイテムの名前を効果的に変更します。 エイリアスは
ORDER BY
で使用できます 句ですが、クエリ内の他の句ではありません 。
QTYLIV
を参照する場合 GROUP BY
で 選択リストはまだ評価されておらず、エイリアスは存在しません。これは、クエリが解析および実行される方法です。
選択リストに複雑な式がある場合、それを外側の選択でラップし、後でグループ化するのが最も簡単なことがよくあります。
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 ;
GROUP BY
では元のテーブルエイリアスを使用しないことに注意してください またはORDER BY
外側のselectの句は、スコープ内にないためです。