Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Order By Column Alias With Case  [new]
progproger
Member

Откуда:
Сообщений: 22
Здравстуйте!

Подскажите пожалуйста :

Есть следующий запрос

SELECT

......

CASE

WHEN @Postcode IS NULL THEN NULL
ELSE CAST(dbo.fnGetDistance (MAX(ppc.Lat), MAX(ppc.Long), @PostcodeLat, @PostcodeLong, 'Miles') AS DECIMAL(18,1))
END AS Distance

.......

ORDER BY

CASE WHEN [Distance] IS NULL THEN 1 ELSE 0 END, Distance ASC

Который выдает ошибку "Invalid column name 'Distance' "

Можно ли как-нибудь проверить "Distance" на null ? Если да, то как?


Можно написать и следующим образом

CASE WHEN CAST(dbo.fnGetDistance (MAX(ppc.Lat), MAX(ppc.Long), @PostcodeLat, @PostcodeLong, 'Miles') AS DECIMAL(18,1)) IS NULL THEN 1 ELSE 0 END, Distance ASC

Так выдает правильный результат... Мне интересно, повлияет ли последний запрос на скорость? Спасибо заранее
18 июн 13, 15:26    [14448535]     Ответить | Цитировать Сообщить модератору
 Re: Order By Column Alias With Case  [new]
vah
Member

Откуда:
Сообщений: 2694
select * from
(SELECT

......

CASE

WHEN @Postcode IS NULL THEN NULL
ELSE CAST(dbo.fnGetDistance (MAX(ppc.Lat), MAX(ppc.Long), @PostcodeLat, @PostcodeLong, 'Miles') AS DECIMAL(18,1))
END AS Distance) www

.......

ORDER BY

CASE WHEN [Distance] IS NULL THEN 1 ELSE 0 END, Distance ASC
18 июн 13, 15:34    [14448607]     Ответить | Цитировать Сообщить модератору
 Re: Order By Column Alias With Case  [new]
Glory
Member

Откуда:
Сообщений: 104751
progproger
ORDER BY

CASE WHEN [Distance] IS NULL THEN 1 ELSE 0 END, Distance ASC

Который выдает ошибку "Invalid column name 'Distance' "

Можно ли как-нибудь проверить "Distance" на null ? Если да, то как?

Какой смысл в таком упорядочивании, если Null values are treated as the lowest possible values.
18 июн 13, 15:41    [14448678]     Ответить | Цитировать Сообщить модератору
 Re: Order By Column Alias With Case  [new]
progproger
Member

Откуда:
Сообщений: 22
Glory,

Смысл в том что мне вначале нужны NOT Null values , а затем уже Null's... И т.к. Null is a lowest possible values, запрос будет выкидывать сначала Null's а затем Not Null's... Для этого и проверка с помошью case statement
18 июн 13, 16:03    [14448889]     Ответить | Цитировать Сообщить модератору
 Re: Order By Column Alias With Case  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
progproger,

1. CTE
2. cross apply
18 июн 13, 16:25    [14449076]     Ответить | Цитировать Сообщить модератору
 Re: Order By Column Alias With Case  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
invm
progproger,

1. CTE
2. cross apply
3. select from (select)
хотя cross apply мне нравится больше всего :)
18 июн 13, 16:58    [14449298]     Ответить | Цитировать Сообщить модератору
 Re: Order By Column Alias With Case  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
invm
1. CTE
2. cross apply
+1
18 июн 13, 17:41    [14449575]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить