Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Сортировка результатов запроса
|
|||
|---|---|---|---|
|
#18+
Как сделать в хранимой процедуре сортировку вывода результатов запроса в зависимости от передаваемого ей параметра ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2001, 11:18 |
|
||
|
Сортировка результатов запроса
|
|||
|---|---|---|---|
|
#18+
По-моему очень даже просто 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2001, 12:04 |
|
||
|
Сортировка результатов запроса
|
|||
|---|---|---|---|
|
#18+
Судя по всему, в общем случае надо использовать ORDER BY и динамический sql. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2001, 12:09 |
|
||
|
Сортировка результатов запроса
|
|||
|---|---|---|---|
|
#18+
Если необходимо только сортировать в зависимости от параметра, то можно так 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2001, 12:22 |
|
||
|
Сортировка результатов запроса
|
|||
|---|---|---|---|
|
#18+
...а если поля разных типов то: 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2001, 12:32 |
|
||
|
Сортировка результатов запроса
|
|||
|---|---|---|---|
|
#18+
Не совсем понял 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2001, 14:38 |
|
||
|
Сортировка результатов запроса
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2001, 14:51 |
|
||
|
Сортировка результатов запроса
|
|||
|---|---|---|---|
|
#18+
А у меня всё работает 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2001, 14:54 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32011678&tid=1825898]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
26ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 315ms |

| 0 / 0 |
