gpt4 book ai didi

sql-server - 如何正确嵌套CTE

转载 作者:行者123 更新时间:2023-12-02 14:17:05 28 4
gpt4 key购买 nike

这个问题被问过几次,但我仍然没有找到正确的答案或正确的方法:

...

;WITH CTE AS
(
SELECT * FROM ...
)
SELECT *, [dbo].[udf_BetaInv](A, B, C, D) AS 'Loss'
FROM CTE
WHERE (Loss >= @MinRetention)

这不起作用,我无法创建存储过程,显然我无法在 WHERE 中使用 Loss,因为该范围内不存在 Loss。

我想使用另一个 CTE 来包装这个,这样我就可以把 WHERE 放在外面,但似乎不起作用,尝试了这个:

;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)

但它无法在 SQL Server 中编译,我收到一个错误,即“(”错位了上面的许多行,但没有任何关系,如果我删除第二个 CTE,它就可以正常工作。

我只想避免代码重复,不想在 select 和 where 中调用我的 [udf_BetaInv] 两次。

最佳答案

您有一个不应该有的中间SELECT。这应该有效:

;WITH CTE AS
(
SELECT * FROM ...
),
RESULTS AS
(
SELECT *, [dbo].[udf_BetaInv(A, B, C, D) AS 'Loss'
FROM CTE
)
SELECT *
FROM RESULTS
WHERE (Loss >= @MinRetention)

关于sql-server - 如何正确嵌套CTE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7306191/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com