如何按字母顺序对表格中的列进行排序?

时间:2018-04-03 22:54:40

标签: mysql sql amazon-web-services periscope

所以我的老板要求我们按字母顺序对列进行排序,这样客户就可以更轻松地找到他们想要的列。下面的图片显示了我的意思。 目前,列的显示顺序如下:original layout

但是,我想要实现的目标是:sorted columns

正如您所看到的那样,列按字母顺序排序,但我是手动完成的。我试图想办法让代码去做。即使这听起来像一个相当简单的目标,它花了我很多时间,我所有的方法都变成了死路一条。 我在Periscopedata.com上运行我的代码,我认为他们使用亚马逊的Redshift。

Periscopedata的工程师帮助了我很多,他们的方法就是这样:

CREATE TABLE  #ordercolumns as SELECT attname::varchar as column_name 
from pg_attribute WHERE attrelid='devices'::regclass::oid and 
attnum>=1;


SELECT 'SELECT ' || LISTAGG(column_name, ',')  within group (order by 
column_name)  || ' FROM devices' FROM #ordercolumns;
DROP TABLE #ordercolumns;

我想知道我是否可以做类似的事情:

select (select * from ordercolumns) from devices

很抱歉,如果我没有充分解释我的问题。

我想提前感谢你们,因为自从我上大学以来,这个社区对我帮助很大。

更新:我想感谢你的帮助。我们尝试避免任何类型的手动排序,因为我们有数百个客户端,每个客户端都有他们想要查看的不同列。因此,手动排序列将花费太长时间,准确度很低。谢谢

1 个答案:

答案 0 :(得分:0)

您可以使用以下内容重新排列列的顺序:

ALTER TABLE `devices` 
    CHANGE COLUMN content content VARCHAR(255) FIRST,
    CHANGE COLUMN date date DATE AFTER `content`,
    CHANGE COLUMN id id INT(11) AFTER `date`,
    ....
;

请务必检查每列的数据类型,并在进行任何更改之前始终对表进行备份。