【问题标题】:Select * with Case statement选择 * 和 Case 语句
【发布时间】:2018-04-11 02:29:14
【问题描述】:

我有一个包含 50 多列的表,我正在尝试选择所有列,但我想向其中添加 case 语句的一列除外,我尝试这样做

Select A.*,Case when COLUMN1 THEN end as XX from TABLE A,

但这会导致 COLUMN1 在 * 结果和 case 条件下重复两次,有没有办法从 select * 结果中排除此列?还是我必须输入每个列的名称并将 case 语句添加到该特定列?

非常感谢您的帮助。

【问题讨论】:

  • 无法使用简单的SELECT 排除列。
  • 是的,使用 Oracle 18c PTF 你可以实现它SELECT * EXCEPT 和示例skip by name
  • @lad2025 只需首先编写一个多态表函数,对于想要编写一个跳过一列的即席查询的人来说,这肯定是一个不平凡的步骤。看起来实际的select * except 语法仍然是一个遥远的梦想。
  • @WilliamRobertson 不那么遥远BigQuery SELECT * EXCEPT。不幸的是,Oracle 没有直接的等价物

标签: sql oracle


【解决方案1】:

正如 cmets 所指出的,您不能轻易地更改 select * 语句中的一列。但是,如果您不想输入所有列名,您仍然可以使用简单的查询为您获取它们。

select listagg(column_name, ', ') within group (order by column_id) 
  from user_tab_cols where table_name = 'MY_TABLE';

一些 IDE 也会进行列名扩展 - 例如,在 SQL Developer 中,您可以将表拖到工作表中以列出所有列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-05
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多