Esta pregunta se formuló algunas otras veces, pero todavía no ha conseguido resolver la respuesta correcta o adecuada manera de hacer esto:Cómo nido CTE adecuadamente
...
;WITH CTE AS
(
SELECT * FROM ...
)
SELECT *, [dbo].[udf_BetaInv](A, B, C, D) AS 'Loss'
FROM CTE
WHERE (Loss >= @MinRetention)
Este no funciona y no puedo crear el procedimiento almacenado, claramente no puedo usar Pérdida en el DONDE porque no existe en ese ámbito.
quisiera utilizar otro CTE para envolver éste, así que puede poner el donde por un exterior, pero no no parecen funcionar, probamos este:
;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)
Pero no se puede compilar en SQL Servidor, me sale un error que indica que '(' se pierde muchas filas pero no tiene nada que ver, si elimino el segundo CTE funciona bien.
Solo quiero evitar la duplicación de código, no quiero llamar a mi [ udf_BetaInv] dos veces en la selección y también en el lugar.
¿Se refiere a '[Loss]' (un nombre de columna) not ''Loss'' (a string)? No estoy seguro si eso causaría el error, aunque – Rup