powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сортировка результатов запроса
8 сообщений из 8, страница 1 из 1
Сортировка результатов запроса
    #32011678
vladv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как сделать в хранимой процедуре сортировку вывода результатов запроса в зависимости от передаваемого ей параметра
...
Рейтинг: 0 / 0
Сортировка результатов запроса
    #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
Сортировка результатов запроса
    #32011681
MessMaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Судя по всему, в общем случае надо использовать ORDER BY и динамический sql.
...
Рейтинг: 0 / 0
Сортировка результатов запроса
    #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
Сортировка результатов запроса
    #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
Сортировка результатов запроса
    #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
Сортировка результатов запроса
    #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
Сортировка результатов запроса
    #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
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сортировка результатов запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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