我如何订购商品和子商品?
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;
我有 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;