2016-10-04 59 views
1

是否可以从我的表格中选择前20列,而不必在选择中列出每列?选择前20列

当我进行选择时,列总是以相同的方式排序,所以必须有一些底层订单。

+1

是不是真的那么难,只是命名20列? – tbone

+0

构建它动态查询'all_tab_columns' –

+1

如果你正在做它同一张表的很多,只是创建一个视图 – thatjeffsmith

回答

-1

在SQL Server数据库中有一个名为sysColumns的表,它记录了每个表中的所有列。我认为这是一个SQL标准,也应该在Oracle中。

编辑:感谢来自@ davegreen100的评论,此表在Oracle中,但名为DBA_TAB_COLUMNS

尝试运行Select * from DBA_TAB_COLUMNS并查看结果是什么,并从那里开始工作。

如果它的存在(在Oracle),你最终会与一些落得像

Select name from DBA_TAB_COLUMNS 
Where id = @tableId -- <--- the id of the table 
    and colOrder <= 20 

您最终的SQL将可能不得不使用从上述

+1

在oracle中,表格是DBA_TAB_COLUMNS – davegreen100

1

下面的输出动态地生成查询将为您形成SQL。它使用字典表all_tab_columns来获取表的列名。

SELECT ' SELECT ' 
    || REPLACE(LISTAGG(column_name,',') WITHIN GROUP(ORDER BY column_id),',',',' 
    ||CHR(10)) 
    || ' FROM YOUR_TABLE' 
FROM all_tab_columns 
WHERE owner ='YOUR_SCHEMA_NAME' 
AND table_name='YOUR_TABLE_NAME' 
AND column_id <= 20; 
+0

谢谢,这会在查询结果中产生我需要复制的语法,粘贴到工作表中并运行。是否有可能添加更多的代码到上面这意味着它也会运行查询? – amsbam1

+0

你如何执行查询?在SQL Developer中? –

+0

是的,SQL开发人员。 – amsbam1

0

你可以使用列的索引,而不是列名称,如选择0,1,2,......

+0

你试过一次吗? –

+1

是的,但是没有给出输出列名称的问题 –