आप 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
बाहरी चयन में खंड, क्योंकि वे अब दायरे में नहीं हैं।