Oracle - select语句别名一列和通配符以获取所有剩余列

时间:2015-11-18 23:47:43

标签: oracle select alias

SQL新手。如果这个问题是基本问题,请原谅我。我有办法在下面这样做吗

SELECT COLUMN1 as CUSTOM_NAME, <wildcard for remaining columns as is> from TABLE;

我只希望COLUMN1在最终结果中出现一次

3 个答案:

答案 0 :(得分:1)

无法使用常规SQL *制作那种动态SELECT list

这是一件好事。编程变得越来越困难,越是动态。即使是简单的*语法,虽然在许多上下文中很有用,但会在生产代码中引起问题。 Oracle SQL语法已经比大多数传统编程语言更复杂,添加了一些元语言来描述查询返回的内容可能是一场噩梦。

*嗯,您可以使用Oracle data cartridgeDBMS_XMLGENtrick with the PIVOT clause创建内容。但是这些解决方案中的每一个都会非常复杂,当然也不像输入列那么简单。

答案 1 :(得分:0)

这就像你将得到的那样接近。 将重要的列放在前面是非常方便的, 同时如果需要可以滚动到其他人。 COLUMN1将最终在那里两次。

SELECT COLUMN1 as CUSTOM_NAME, 
       aliasName.*
FROM TABLE aliasName;

答案 2 :(得分:0)

如果您有很多列,则可能值得自动生成完整的列列表,而不是依赖*选择器。

因此,采用两步方法是使用自定义的前N个列和其他列的未指定顺序生成列列表,然后在实际的select语句中使用该生成的列表。

-- select comma separated column names from table with the first columns being in specified order
select
LISTAGG(column_name, ', ') WITHIN GROUP (
  ORDER BY decode(column_name,
                  'FIRST_COLUMN_NAME', 1,
                  'SECOND_COLUMN_NAME', 2) asc) "Columns"
from user_tab_columns
where table_name = 'TABLE_NAME';

用您的真实姓名替换TABLE_NAMEFIRST_COLUMN_NAMESECOND_COLUMN_NAME,并根据需要调整显式列的列表。

然后执行查询并使用结果,该结果应类似于

FIRST_COLUMN_NAME, SECOND_COLUMN_NAME, OTHER_COLUMN_NAMES

这当然是5位数列的开销,但是,如果您遇到的列数只有3位的公司数据库,这会很有趣。