T-SQL在SELECT中设置(赋值)函数结果

时间:2015-08-05 12:11:56

标签: sql tsql

我需要知道如何从函数设置RETURN值,以便可以在同一查询中再次使用它。

问题:

SELECT
A.Field1, 
A.Field2,
[TheFunction](ID,3.4,'test') SumOfAverages,
[TheFunction2]([TheFunction](ID,3.4,'test'), 1,2)) Summary
FROM ...

你可以看到我在Function2中再次输入函数作为参数,但是我想将它设置为变量,所以我不需要这样做。

我尝试过做

[TheFunction](ID,3.4,'test') SumOfAverages,
[TheFunction2](SumOfAverages, 1,2)) Summary

我不介意在外部SELECT中执行此操作,但我不想加入INNER选择,因为我已经有字段来获取结果。

我将不胜感激任何帮助

由于

2 个答案:

答案 0 :(得分:1)

如果要重新使用该值,则需要使用子查询或CTE:

SELECT t.*,
       [TheFunction2](SumOfAverages, 1,2)) Summary
FROM (SELECT A.Field1, A.Field2,
             [TheFunction](ID,3.4,'test') SumOfAverages,
      FROM ...
     ) t

答案 1 :(得分:1)

您应该可以通过将第一个函数转换为单独的SELECT子句来完成此操作。实现这一目标的典型方法是使用CTE,子查询或APPLY。类似的东西:

SELECT
A.Field1, 
A.Field2,
t.SumOfAverages,
[TheFunction2](t.SumOfAverages, 1,2)) Summary
FROM <existing tables>
CROSS APPLY (SELECT TheFunction(ID,3.4,'test') as SumOfAverages) t

原因是在每个SELECT子句中,系统意味着能够并行评估所有列表达式 - 因此语言禁止表达式之间的任何依赖。