所以我的老板要求我们按字母顺序对列进行排序,这样客户就可以更轻松地找到他们想要的列。下面的图片显示了我的意思。 目前,列的显示顺序如下: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
很抱歉,如果我没有充分解释我的问题。
我想提前感谢你们,因为自从我上大学以来,这个社区对我帮助很大。
更新:我想感谢你的帮助。我们尝试避免任何类型的手动排序,因为我们有数百个客户端,每个客户端都有他们想要查看的不同列。因此,手动排序列将花费太长时间,准确度很低。谢谢
答案 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`,
....
;
请务必检查每列的数据类型,并在进行任何更改之前始终对表进行备份。