我如何订购商品和子商品?

How can I order item and subitem?

我有 table:

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

第"id"列在有item和subitem的地方有code值,例如:

项目

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

子项目:

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

其中,101为1的子项,201为2的子项,1001为10的子项,依此类推

如何使用 "Order By" 并获得以下顺序:

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

你可以使用这个:

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

但是,您的 table 确实需要重新设计。

您的问题是有些项目是一位数(1、2 等),有些是两位数(10、11 等)。

您首先需要奇数位(1 位或 3 位: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;