Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 функция в Order by  [new]
Гость74
Guest
Вот так не работает
select Functinon(F1) as F2, F3
from T1
order by case @Order when 1 then F2 + F3
                              else   F3 + F2
            end


так работает, но мне так не надо
select Functinon(F1) as F2, F3
from T1
order by F2, F3
           

Так работает, но вопрос - как будет вызываться функция - один раз для каждой записи или два? Если два, то можно ли как-то переписать запрос, чтоб использовать алиас поля, т.е. F2

select Functinon(F1) as F2, F3
from T1
order by case @Order when 1 then Functinon(F1)  + F3
                              else   F3 + Functinon(F1) 
            end
20 июл 09, 16:31    [7436692]     Ответить | Цитировать Сообщить модератору
 Re: функция в Order by  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Хм, ничего не понимаю
Разве меняется сумма от перемены мест слагаемых?
20 июл 09, 16:35    [7436722]     Ответить | Цитировать Сообщить модератору
 Re: функция в Order by  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
select Functinon(F1) as F2, F3
from T1
order by case @Order when 1 then F2
                              else   F3
            end, case @Order when 1 then F3
                              else   F2
            end

для спящего время бодрствования равносильно сну
20 июл 09, 16:36    [7436731]     Ответить | Цитировать Сообщить модератору
 Re: функция в Order by  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
аааа, поля не числовые... тогда ясно
20 июл 09, 16:37    [7436740]     Ответить | Цитировать Сообщить модератору
 Re: функция в Order by  [new]
iljy
Member

Откуда:
Сообщений: 8711
Гость74,

select F2, F3 from
(
  select Functinon(F1) as F2, F3
  from T1
) t
order by case @Order when 1 then F2 + F3
                              else   F3 + F2
            end
20 июл 09, 16:38    [7436745]     Ответить | Цитировать Сообщить модератору
 Re: функция в Order by  [new]
Гость74
Guest
Алексей2003
select Functinon(F1) as F2, F3
from T1
order by case @Order when 1 then F2
                              else   F3
            end, case @Order when 1 then F3
                              else   F2
            end

для спящего время бодрствования равносильно сну


нет, при использованиии Case алиас не работает.

iljy спасибо, но вопрос остался (для общего развития). При использовании моего варианта функция вызывается два раза?
20 июл 09, 16:53    [7436841]     Ответить | Цитировать Сообщить модератору
 Re: функция в Order by  [new]
iljy
Member

Откуда:
Сообщений: 8711
Гость74,
это дело темное:) можете попробовать задать вопрос в поддержку скуля.
20 июл 09, 16:58    [7436875]     Ответить | Цитировать Сообщить модератору
 Re: функция в Order by  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
select Functinon(F1) as F2, F3
from T1
order by case @Order when 1 then 1
                              else   2
            end, case @Order when 1 then 2
                              else   1
            end

для спящего время бодрствования равносильно сну
20 июл 09, 17:05    [7436915]     Ответить | Цитировать Сообщить модератору
 Re: функция в Order by  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
Гость74
При использовании моего варианта функция вызывается два раза?

3 раза
20 июл 09, 17:05    [7436918]     Ответить | Цитировать Сообщить модератору
 Re: функция в Order by  [new]
Гость74
Guest
Алексей2003
Гость74
При использовании моего варианта функция вызывается два раза?

3 раза



Почему три????
20 июл 09, 17:07    [7436934]     Ответить | Цитировать Сообщить модератору
 Re: функция в Order by  [new]
Glory
Member

Откуда:
Сообщений: 104760
Гость74
но вопрос остался (для общего развития). При использовании моего варианта функция вызывается два раза?

На этот вопрос вам с легкостью ответят план выполнения и Profiler
20 июл 09, 17:11    [7436956]     Ответить | Цитировать Сообщить модератору
 Re: функция в Order by  [new]
Crimean
Member

Откуда:
Сообщений: 13148
1) WITH то есть CTE
2) SELECT FROM ( SELECT ) as
3) уже с "раздельным" CASE подсказали
но первые два - более чем наглядно
ИМХО
20 июл 09, 17:14    [7436976]     Ответить | Цитировать Сообщить модератору
 Re: функция в Order by  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
Гость74
Алексей2003
Гость74
При использовании моего варианта функция вызывается два раза?

3 раза



Почему три????

потому что 3 раза упоминается, значит 3 раза вызывается.
20 июл 09, 17:43    [7437138]     Ответить | Цитировать Сообщить модератору
 Re: функция в Order by  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Алексей2003
Гость74
Алексей2003
Гость74
При использовании моего варианта функция вызывается два раза?

3 раза



Почему три????

потому что 3 раза упоминается, значит 3 раза вызывается.
Если функция детерминированная и вызывается с одним и тем же аргументом,
то зачем сервер её три раза вызывать будет?
Может, он не настолько глуп?
20 июл 09, 17:59    [7437216]     Ответить | Цитировать Сообщить модератору
 Re: функция в Order by  [new]
Гость74
Guest
Алексей2003


потому что 3 раза упоминается, значит 3 раза вызывается.


Упоминиется три, но работает то в case только одно условие???
20 июл 09, 18:16    [7437264]     Ответить | Цитировать Сообщить модератору
 Re: функция в Order by  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
2Гость74
да, все таки 2 раза вызовется.

2iap
вызовется столько раз, сколько дойдет до функции. на аргументы сервер не смотрит.

для спящего время бодрствования равносильно сну
20 июл 09, 19:21    [7437453]     Ответить | Цитировать Сообщить модератору
 Re: функция в Order by  [new]
Crimean
Member

Откуда:
Сообщений: 13148
а если функцию переписать как табличную + cross apply то вызовется 1 раз :) но есть шанс нарваться на спул
20 июл 09, 19:29    [7437462]     Ответить | Цитировать Сообщить модератору
 Re: функция в Order by  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
2Crimean
select * from ttt t cross apply dbo.my_fun(t.i)
вызовется 1 раз функция?

для спящего время бодрствования равносильно сну
20 июл 09, 19:33    [7437468]     Ответить | Цитировать Сообщить модератору
 Re: функция в Order by  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Алексей2003
2Crimean
select * from ttt t cross apply dbo.my_fun(t.i)
вызовется 1 раз функция?


точно, гоню. там же параметр передается..
20 июл 09, 20:40    [7437569]     Ответить | Цитировать Сообщить модератору
 Re: функция в Order by  [new]
borin
Member

Откуда: angarsk/msk
Сообщений: 677
select f1,f2,case чего там
order by 3
21 июл 09, 11:14    [7439034]     Ответить | Цитировать Сообщить модератору
 Re: функция в Order by  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
2Гость74
вообще рекоммендую отказаться от функции, и развернуть ее в запросе. сэкономите время загрузки сервера...

для спящего время бодрствования равносильно сну
21 июл 09, 11:50    [7439299]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить