2

所以我的老板要求我们按字母顺序对列进行排序,以便客户更容易找到他们想要的列。下面的图片显示了我的意思。目前,列按如下顺序显示:原始布局

但是,我想要实现的是这样的:sorted columns

如您所见,这些列是按字母顺序排序的,但我是手动完成的。我正在尝试找出一种让代码执行此操作的方法。尽管这听起来像是一个相当简单的目标,但我花了很多时间,我所有的方法都变成了死胡同。我在 Periscopedata.com 上运行我的代码,我认为他们使用 Amazon 的 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

抱歉,如果我没有很好地解释我的问题。

我要提前感谢你们,因为这个社区自从我上大学以来就给了我很大的帮助。


更新:我要感谢您的所有帮助。我们尽量避免任何类型的手动排序,因为我们有数百个客户,每个客户都有他们想要查看的不同列。因此,手动对列进行排序会花费很长时间,而且准确性很低。谢谢你

4

1 回答 1

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`,
    ....
;

请务必检查每列的数据类型,并一如既往地在进行任何更改之前备份表。

于 2018-04-04T02:33:12.330 回答