Как обойтись без повторных вызовов функции?

начинающий sql-гуру
Дата: 07.06.2011 10:13:44
Как-нибудь можно обойтись без повторов вызова функции?

SELECT
 a.param1
,b.param2
,c.param3
,param4 = fn(a.param1, b.param2, c.param3)
,param5 = (select e from table1 where d = fn(a.param1, b.param2, c.param3))
,param6 = (select f from table1 t1 left join table2 t2 on t1.g = t2.g where t1.d =  fn(a.param1, b.param2, c.param3))
...
...
...
FROM
...
-- куча джойнов
---
Prolog
Дата: 07.06.2011 10:21:15
С SQL 2005 - cross|outer apply.
начинающий sql-гуру
Дата: 07.06.2011 10:50:20
Prolog
С SQL 2005 - cross|outer apply.

Это для табличных функций. А если у меня скаляр возвращается?
Гадя Петрович
Дата: 07.06.2011 10:52:51
начинающий sql-гуру
Prolog
С SQL 2005 - cross|outer apply.

Это для табличных функций. А если у меня скаляр возвращается?
дык занеси этот скаляр в переменную и вперёд
начинающий sql-гуру
Дата: 07.06.2011 10:57:01
Гадя Петрович
начинающий sql-гуру
пропущено...

Это для табличных функций. А если у меня скаляр возвращается?
дык занеси этот скаляр в переменную и вперёд

Ну и как сделать такую переменную, значение которой будет зависеть от параметров каждой строки запроса?
Glory
Дата: 07.06.2011 10:59:26
вложенные запросы, где сначала это столбец вычисляется, а потом уже используется
Гадя Петрович
Дата: 07.06.2011 10:59:38
начинающий sql-гуру,

не понял

param4 = @var = fn(a.param1, b.param2, c.param3)
...
t2.g where t1.d =  @var
начинающий sql-гуру
Дата: 07.06.2011 11:04:20
Гадя Петрович
начинающий sql-гуру,

не понял
param4 = @var = fn(a.param1, b.param2, c.param3)

Этот синтаксис вообще не прокатил.
Он для 2008?
Гадя Петрович
Дата: 07.06.2011 11:06:37
начинающий sql-гуру,

пардон, правда так нельзя :)
Mnior
Дата: 07.06.2011 11:09:00
1. Функция итак должна вызваться раз.
2.
SELECT ...
,param5 = (select e from table1 where d = X.fn)
,param6 = (select f from table1 t1 left join table2 t2 on t1.g = t2.g where t1.d =  X.fn)
FROM ...
CROSS APPLY (SELECT fn(a.param1, b.param2, c.param3) X (fn)