यह सवाल कुछ दूसरी बार पूछा गया था, लेकिन मैं अभी भी सही जवाब या उचित तरीका यह है सुलझाने के लिए प्रबंधन नहीं किया:कैसे घोंसला करने के लिए CTE ठीक से
...
;WITH CTE AS
(
SELECT * FROM ...
)
SELECT *, [dbo].[udf_BetaInv](A, B, C, D) AS 'Loss'
FROM CTE
WHERE (Loss >= @MinRetention)
यह काम नहीं करता है और मैं संग्रहित प्रक्रिया नहीं बना सकता, स्पष्ट रूप से मैं कहां में नुकसान का उपयोग नहीं कर सकता क्योंकि उस दायरे में मौजूद नहीं है।
मैं एक CTE उपयोग करने के लिए यह एक रैप करने के लिए तो मैं बाहरी एक पर कहां रख सकते हैं चाहते हैं लेकिन नहीं काम करने के लिए नहीं लगता है, करने की कोशिश की इस:
;WITH CTE AS
(
SELECT * FROM ...
)
SELECT *, [dbo].[udf_BetaInv(A, B, C, D) AS 'Loss'
FROM CTE,
RESULTS AS
(SELECT * FROM CTE)
SELECT *
FROM RESULTS
WHERE (Loss >= @MinRetention)
लेकिन यह एसक्यूएल में संकलन नहीं है सर्वर, मुझे एक त्रुटि मिलती है कि '(' उपरोक्त कई पंक्तियों को गलत जगह पर रखता है लेकिन अगर मैं दूसरा सीटीई हटा देता हूं तो यह करने के लिए कुछ भी नहीं है।
मैं केवल कोड डुप्लिकेशन से बचना चाहता हूं, मेरी कॉल नहीं करना चाहता [ udf_BetaInv] चयन में दो बार और जहां भी।
क्या आपका मतलब '[हानि]' (एक कॉलम नाम) '' लॉस '(एक स्ट्रिंग) नहीं है? सुनिश्चित नहीं है कि अगर त्रुटि उत्पन्न होगी, हालांकि – Rup