首页 > 解决方案 > 有没有办法按列值排序结果?

问题描述

我有许多列的 MySQL 表。

id|日期 |col1|col2|col3|col4|col5|... |col500|
-------------------------------------------------- ---------------
 1|01.10.2019| 152| 99| 0|1598| 48| 用零填充| 1|
-------------------------------------------------- ---------------
 2|02.10.2019| 12| 344| 19|2544| 3| 用零填充| 152|
-------------------------------------------------- ---------------
……

是否可以订购列

SELECT * FROM table WHERE Date = '02.10.2019' ORDER BY COLUMNS

并得到这样的结果

id|日期|col4|col2|col500|col3|col1|col5|...|
-------------------------------------------------- ---------------
 2|02.10.2019 |2544| 344| 152| 19| 12| 3|用零填充

标签: mysqlsql

解决方案


如果您想按列值排序,正如 Madhur Bhaiya 和 P.Salmon 所说,可能是您的表格设计不正确,您可能在说rows,而不是columnsID/ Date/ col1/ col2/ ... / col500您可能需要这样的表格,而不是带有列的表格

CREATE TABLE tbl(
pk integer not null primary key default autoincrement,
id integer not null,
dt date not null,
xxx_id integer,
value integer);

其中 XXX_ID 代表旧表中的列位置(可能是单个记录的标识符,我不知道您使用此表做什么)。

现在您必须插入值:

INSERT INTO tbl (id, date, value) VALUES (1, '2019-10-01', 152);
INSERT INTO tbl (id, date, value) VALUES (1, '2019-10-01', 99);
INSERT INTO tbl (id, date, value) VALUES (1, '2019-10-01', 0);
INSERT INTO tbl (id, date, value) VALUES (1, '2019-10-01', 1592);
INSERT INTO tbl (id, date, value) VALUES (1, '2019-10-01', 48);
....
INSERT INTO tbl (id, date, value) VALUES (2, '2019-10-02', 12);
INSERT INTO tbl (id, date, value) VALUES (2, '2019-10-02', 344);
INSERT INTO tbl (id, date, value) VALUES (2, '2019-10-02', 19);
INSERT INTO tbl (id, date, value) VALUES (2, '2019-10-02', 2544);
...

你的问题的答案变得非常容易,比如

select * from tbl 
where id = 1 AND date = '2019-10-01'
order by value

最后一点:您可以决定插入具有零值的记录,或者跳过它们,或者插入它们的NULL值。这取决于表的目标是什么。


推荐阅读