powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Динамическая сортировка
7 сообщений из 7, страница 1 из 1
Динамическая сортировка
    #36136831
Изюм
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! Использую БД Sybase ASE 12.5.3 . Мне необходимо сортировать значения в селекте в определенном порядке. Для этого я использую в предложении ORDER BY оператор CASE. Проблема в том, что когда в запросе используется UNION то СASE не работает, система выдает следующую ошибку:Order-by items must appear in the select-list if the statement contains set operators. Вот запрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
SELECT  1  AS id_type, number, sym
FROM hym_el
WHERE number IN (  6 , /*C*/
                    14 , /*Si*/
                    15 , /*P*/
                    16 , /*S*/
                    24 , /*Cr*/
                    25 , /*Mn*/
                    28 , /*Ni*/            
                    29 ) /*Cu*/
UNION
SELECT  2 , number, sym
FROM hym_el
WHERE number IN (  5 , /*B*/
                     7 , /*N*/
                     20 , /*Ca*/
                     22 , /*Ti*/
                     23 , /*V*/
                     33 , /*As*/
                     42 , /*Mo*/
                     50 , /*Sn*/
                     74 ) /*W*/
ORDER BY id_type, 
           case
             when number =  25  then  6 . 5 
             else number
           end
...
Рейтинг: 0 / 0
Динамическая сортировка
    #36136961
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзюмДобрый день! Использую БД Sybase ASE 12.5.3 . Мне необходимо сортировать значения в селекте в определенном порядке. Для этого я использую в предложении ORDER BY оператор CASE. Проблема в том, что когда в запросе используется UNION то СASE не работает, система выдает следующую ошибку:Order-by items must appear in the select-list if the statement contains set operators. Вот запрос:
А отформатировать было влом? вот такое проканает на ASA, ASE под рукой нет:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
SELECT  1  AS id_type, 
       number, 
       sym, 
       if number =  25  then  6 . 5  else number endif as num_sort
  FROM hym_el
 WHERE number IN (  6 , /*C*/
                    14 , /*Si*/
                    15 , /*P*/
                    16 , /*S*/
                    24 , /*Cr*/
                    25 , /*Mn*/
                    28 , /*Ni*/            
                    29 ) /*Cu*/

UNION

SELECT  2 , number, sym, number
 FROM hym_el
  WHERE number IN (  5 , /*B*/
                     7 , /*N*/
                     20 , /*Ca*/
                     22 , /*Ti*/
                     23 , /*V*/
                     33 , /*As*/
                     42 , /*Mo*/
                     50 , /*Sn*/
                     74 ) /*W*/
ORDER BY  1 ,  4 

Кстати, а на ASE можно обойтись без UNION-а? На ASA можно.
...
Рейтинг: 0 / 0
Динамическая сортировка
    #36137206
Изюм
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вариант с использованием дополнительного столбца для сортировки тоже рассматривал, он наверное даже проще, но хотелось узнать о работоспособности CASE в предложении ORDER BY в запросах с UNION. А именно это синтаксическая ошибка или просто такая функциональность не поддерживается сервером?
За ответ спасибо. Насчет форматирования учту.
...
Рейтинг: 0 / 0
Динамическая сортировка
    #36137287
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изюм пишет:

> Вариант с использованием дополнительного столбца для сортировки тоже
> рассматривал, он наверное даже проще, но хотелось узнать о
> работоспособности CASE в предложении ORDER BY в запросах с UNION. А
> именно это синтаксическая ошибка или просто такая функциональность не
> поддерживается сервером?

RTFM по SA10 по поводу сортировки с UNION-ом пишет "you must use
integers rather than column names". Очень может быть, что то, что ты
хотел написать, работать просто не должно.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Динамическая сортировка
    #36137495
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё просто. Вы в ORDER BY можете написать
либо ссылку на колонку набора данных по номеру

либо ссылку на колонку набора данных по имени колонки

либо выражение.

Поскольку у вас есть UNION (кстати, должен был бы быть UNION ALL),
то у вас несколько наборов данных, и несколько запросов. Поэтому
остаётся из трёх вариантов только второй, номер колонки.
Если вам нужно выражение, вы его должны включить во все наборы данных,
продублировав.
...
Рейтинг: 0 / 0
Динамическая сортировка
    #36137813
Изюм
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv, благодарю за объяснение.
...
Рейтинг: 0 / 0
Динамическая сортировка
    #36138023
armandvangelden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Угу, и мне спасибо
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Динамическая сортировка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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