Oracle SQL заказ по выражению - PullRequest
0 голосов
/ 24 ноября 2018

Я пытаюсь что-то отсортировать по выражению, и по какой-то причине это не сработает, если у меня не выбрано это выражение:

    select distinct p.stuff
    from p.places 
    join otherPLACE
    order by cos(sin(to_number(p.nr_matricol)));

Но я продолжаю получать эту ошибку

ORA-01791: не выбрано выражение

Если я напишу это так

select distinct 
    p.stuff,
    cos(sin(to_number(p.nr_matricol)))
from p.places 
join otherPLACE 
order by cos(sin(to_number(p.nr_matricol)));

, это работает, но я не хочу, чтобы этот столбец печатался.

Есть ли способ, которым я могу сделать эту работу?

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Проблема в том, что order by происходит после select distinct.Доступны только значения, указанные в select.Типичным подходом будет агрегирование.

Примерно так:

select p.stuff
from places p join
     otherPLACE op
     on . . .
group by p.stuff
order by cos(sin(to_number(max(p.nr_matricol))));
0 голосов
/ 24 ноября 2018

Вы можете переходить во встроенное представление

SELECT a FROM
    (select distinct p.stuff a, cos(sin(to_number(p.nr_matricol))) b
     from p.places 
          join otherPLACE) T
ORDER BY b;

ПРИМЕЧАНИЕ: Я надеюсь, что ваш код был псевдокодом.Потому что у вас есть декартово соединение, если вы не указали столбцы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...