Как я могу заказать товар и подпункт? - PullRequest
0 голосов
/ 02 января 2019

У меня есть таблица:

CREATE TABLE lc (
    id CHARACTER(4),
    name TEXT
);

Столбец "id" имеет кодовое значение, где есть элемент и подпункт, например:

Предметы

1, 2, 3 ... 10, 11 ...

Подпункты:

101, 102, 201, 301 ... 1001, 1002, 1101 ...

Где 101 - подпункт 1, 201 - подпункт 2, 1001 - подпункт 10 и т. Д.

Как использовать «Заказать по» и иметь следующий порядок:

1
101
102
2
201
...
10
1001
1002
11
1101
...

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Ваша проблема в том, что некоторые элементы состоят из одной цифры (1, 2 и т. Д.), Некоторые - из двух (10, 11 и т.цифры: 1, 2, 101, 102, 201, ...), за которыми следуют четные цифры (2 или 4 цифры: 10, 11, 1001, 1002, 1101, ...).Внутри этих двух наборов вам нужен порядок текста: «101» после «1», но до «2».

select * 
from mytable
order by length(num::text) % 2 desc, num::text;
0 голосов
/ 02 января 2019

Вы можете использовать это:

select *
from lc
order by case when id::int < 100 then (id::int::text || '00')::int else id::int end

Однако ваш стол действительно нуждается в редизайне.

...