仅为Oracle sqlplus中的ORDER BY列打印第一个唯一值

时间:2013-02-21 09:07:58

标签: sql oracle sqlplus ddl

这个脚本转储带有Oracle列和注释的表(我做的是:以人类可读的格式转储模式DDL而不依赖于任何外部工具,只需sqlplus,我想将此脚本提交给SVN,所以任何团队会员可以使用它):

SELECT dt.table_name, dt.column_name, dt.data_type, dt.data_length, comm.comments
  FROM user_col_comments comm, user_tab_columns dt
  WHERE dt.table_name = comm.table_name
    AND dt.column_name = comm.column_name
  ORDER BY dt.table_name;

输出看起来像:

TBL111 COL11 ...
TBL111 COL22 ...
TBL222 COL11 ...
TBL222 COL22 ...
TBL222 COL33 ...
TBL333 COL11 ...

为了使其更具可读性,我想方设法跳过不必要的TBLxxx字词:

TBL111 COL11 ...
       COL22 ...
TBL222 COL11 ...
       COL22 ...
       COL33 ...
TBL333 COL11 ...

有什么建议吗?

2 个答案:

答案 0 :(得分:4)

使用SQL * Plus生成报告时,可以使用BREAK ON columnname来抑制查询结果中的重复项。

答案 1 :(得分:1)

SELECT case 
         when row_number() over (partition by dt.table_name order by dt.table_name) = 1 then dt.table_name
         else null
       end as table_name, 
       dt.column_name, 
       dt.data_type, 
       dt.data_length, 
       comm.comments
FROM user_col_comments comm, user_tab_columns dt
WHERE dt.table_name = comm.table_name
  AND dt.column_name = comm.column_name
ORDER BY dt.table_name, dt.column_id;