Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сортировка результатов запроса / 8 сообщений из 8, страница 1 из 1
13.08.2001, 11:18
    #32011678
vladv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка результатов запроса
Как сделать в хранимой процедуре сортировку вывода результатов запроса в зависимости от передаваемого ей параметра
...
Рейтинг: 0 / 0
13.08.2001, 12:04
    #32011680
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка результатов запроса
По-моему очень даже просто

CREATE PROCEDURE dbo.myproc
@orderby_type int=1,....
AS

....
IF @orderby_type = 1
SELECT ... FROM mytable .... ORDER BY myfield1
ELSE IF @orderby_type = 2
SELECT ... FROM mytable .... ORDER BY myfield2
...
Рейтинг: 0 / 0
13.08.2001, 12:09
    #32011681
MessMaker
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка результатов запроса
Судя по всему, в общем случае надо использовать ORDER BY и динамический sql.
...
Рейтинг: 0 / 0
13.08.2001, 12:22
    #32011683
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка результатов запроса
Если необходимо только сортировать в зависимости от параметра, то можно так

CREATE PROCEDURE dbo.myproc
@orderby_type int=1,....
AS

....
SELECT ... FROM mytable .... ORDER BY CASE @orderby_type WHEN 1 THEN myfield1 WHEN 2 THEN myfield2 ELSE myfield3 END
...
Рейтинг: 0 / 0
13.08.2001, 12:32
    #32011684
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка результатов запроса
...а если поля разных типов то:
ORDER BY
CASE @orderby_type WHEN 1 THEN charfield1 else '' end,
CASE @orderby_type WHEN 2 THEN charfield2 else '' end,
CASE @orderby_type WHEN 3 THEN intfield3 else 0 end
...
Рейтинг: 0 / 0
13.08.2001, 14:38
    #32011687
MessMaker
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка результатов запроса
Не совсем понял Glory и SergSuper.

Вы предлагаете писать так?
\ndeclare @ot int
set @ot = 1

select *
from (select 1 x, 2 y, '3' z) t
ORDER BY
CASE @ot WHEN 1 THEN 'x' else '' end,
CASE @ot WHEN 2 THEN 'y' else '' end,
CASE @ot WHEN 3 THEN 'z' else 0 end


У меня SQLServer пишет так:

Server: Msg 1008, Level 15, State 1, Line 7
The SELECT item identified by the ORDER BY number 1 contains a variable as part of the expression identifying a column position. Variables are only allowed when ordering by an expression referencing a column name.
...
Рейтинг: 0 / 0
13.08.2001, 14:51
    #32011689
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка результатов запроса
declare @ot int
set @ot = 1

select * from (select 1 x, 2 y, '3' z) t
ORDER BY
CASE @ot WHEN 1 THEN x else 0 end,
CASE @ot WHEN 2 THEN y else 0 end,
CASE @ot WHEN 3 THEN z else '' end
...
Рейтинг: 0 / 0
13.08.2001, 14:54
    #32011690
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка результатов запроса
А у меня всё работает

create procedure #o @o int as
select * from sysobjects
order by
case when @o=0 then name else '' end,
case when @o=1 then type else '' end,
case when @o=2 then crdate else '20010101' end,
case when @o=3 then id else 0 end
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сортировка результатов запроса / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]