Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как создать "ORDER BY" c CASE @orderBy  [new]
Bumer
Member

Откуда:
Сообщений: 4
Есть такая хп:

create procedure myProc
@orderBy nvarchar(20)
as

select * from mytable
order by CASE WHEN @orderBy = 'myBirthday' THEN myBirthday
WHEN @orderBy = 'myName' THEN myName
ELSE myid
END

--Описание таблицы:
--create table mytable ( myid int,
-- myBirthday datetime,
-- myName nvarchar(20))

exec myProc 'myName' => ругается что
'Syntax error converting datetime from character string.'
17 июн 05, 15:14    [1629490]     Ответить | Цитировать Сообщить модератору
 Re: Как создать "ORDER BY" c CASE @orderBy  [new]
Glory
Member

Откуда:
Сообщений: 104760
Все выражения в THEN должны быть явно или неявно преобразуемы к одному типу
17 июн 05, 15:16    [1629496]     Ответить | Цитировать Сообщить модератору
 Re: Как создать "ORDER BY" c CASE @orderBy  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
select * from mytable
order by 
  CASE WHEN @orderBy = 'myBirthday' THEN myBirthday end
  , CASE WHEN @orderBy = 'myName' THEN myName end
  , myid
END
17 июн 05, 15:27    [1629574]     Ответить | Цитировать Сообщить модератору
 Re: Как создать "ORDER BY" c CASE @orderBy  [new]
Bumer
Member

Откуда:
Сообщений: 4
To get around the datatype problem, use seperate group CASE statements for each datatype.

ORDER BY
CASE WHEN @SORTBY = 1 THEN Numeric1
WHEN @SORTBY = 2 THEN Numeric2
END,
CASE WHEN @SORTBY = 3 THEN VarChar1
WHEN @SORTBY = 4 THEN VarChar2
END DESC,
CASE WHEN @SORTBY = 5 THEN DateTime1
END

Note that each case block is seperated by a comma (after END) except the last block. Also note that you can use ASC or DESC for each CASE statement group.
17 июн 05, 15:27    [1629578]     Ответить | Цитировать Сообщить модератору
 Re: Как создать "ORDER BY" c CASE @orderBy  [new]
BusyMan
Member

Откуда: Москва
Сообщений: 4927
Либо все конвертировать в строку.

P.S. Можно просто Бизик admin@busyman.ru ICQ# 131833549
17 июн 05, 16:00    [1629770]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить