gpt4 book ai didi

sql - 在存储过程中使用聚合函数一次而不是多次

转载 作者:行者123 更新时间:2023-12-04 22:26:31 25 4
gpt4 key购买 nike

我有一个存储过程,它在其中使用一个函数,并且该函数需要两个参数。
我的问题与性能问题有关,见下文

 CASE 
WHEN (DATEDIFF(MINUTE,dbo.FunctionName(DatetimeField, DatetimeID), dbo.FunctionName(DatetimeField, DatetimeID))/60.0) > 8 THEN
(DATEDIFF(MINUTE,dbo.FunctionName(DatetimeField, DatetimeID), dbo.FunctionName(DatetimeField, DatetimeID))/60.0)
Else 0
END
Else
0
END)
Else
(DATEDIFF(MINUTE,dbo.FunctionName(DatetimeField, DatetimeID), dbo.FunctionName(DatetimeField, DatetimeID))/60.0)-T.lunch
END
as 'Total'

现在我要做的是创建一个临时表,这样我就可以使用它来调用函数,而不是每次到达那些需要通过数十万条记录的行时调用函数的方式。
任何帮助表示赞赏。

最佳答案

您可以像这样在查询中重用表达式:

select (case when NewValue > 8 then NewValue else 0 end) xyz
from T
cross apply (
select NewValue = dbo.FunctionName(DatetimeField, DatetimeID)
) x

以这种特殊方式使用的交叉应用可用于引入新列并重用它们的值。此技术适用于在同一查询中重用常用表达式。

普通的批处理级变量可以这样声明:
DECLARE @NewValue int = dbo.FunctionName(DatetimeField, DatetimeID);

关于sql - 在存储过程中使用聚合函数一次而不是多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10376027/

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