Как отсортировать преобразованное поле, используя string_agg - PullRequest
0 голосов
/ 03 сентября 2018

Как отсортировать преобразованное поле. Есть похожие вопросы, однако я не знаю, почему это не работает мной

- поле 'число' является целым числом

string_agg(distinct cast(number as varchar(4)) , ', ')

однако результаты возвращаются в очень странном случайном порядке

Results
12,11,10,1,29

Я просто хотел, чтобы он был отсортирован нормально 1,10,11,12,29

Я пробовал этот код на основе доступных сообщений, но он не работал, и получил следующую ошибку

string_agg(
    distinct cast(number as varchar(4)),', ' order by number) 
    as SPJ

--ERROR: in an aggregate with distinct order by expressions must appear in argument list  

Так попробовал это тоже, а не тот ответ, который я хочу

string_agg(
    distinct cast(number as varchar(4)) , ', ' order by
                            cast(number as varchar(4))) as SPJ
results 
10,11,8,9

Что я делаю не так?

1 Ответ

0 голосов
/ 03 сентября 2018

Это все сложно из-за типов - строки не упорядочены так же, как числа. Таким образом, вы можете сделать это, используя вместо этого массивы:

with t as (
      select num
      from (values (1), (10), (11), (12), (29), (2)) v(num)
     )
select array_to_string(array_agg(distinct num order by num), ', ')
from t ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...