甲骨文在复合键级别中断处留空行

时间:2018-07-12 17:57:43

标签: oracle formatting sqlplus

我希望当三列(下面的ab或c)中的任何一个发生更改时,SQL的输出都留空行。

因此,如果表中有a b c和d列,则最终会得到如下报告:

a b c d #<- column names
------- 
1 a a a #<- V - data itself
1 a a b
        #<- level break here because 1 a b is different from 1 a a
1 a b c

从谷歌搜索中,我已经看到BREAK可以解决这个问题。 但据我所知,这只涉及一栏。

然后我想如果我有一个计算列怎么办。 a是数字,b&c是字母数字数据类型。所以我想我可以使用CONCATTO_CHAR ..

我想知道是否有人可以给我一些指示?

干杯。

1 个答案:

答案 0 :(得分:0)

您可以在不止一列上中断:

SQL> break on a skip 1 duplicates on b skip 1 duplicates on c skip 1 duplicates
SQL> select * from your_table

         A B C D
---------- - - -
         1 a a a
         1 a a b

         1 a b c




3 rows selected.

如果发出普通的break,则会显示已设置的内容:

SQL > break
break on a skip 1 dup
          on b skip 1 dup
          on c skip 1 dup

另一种选择是为复合键生成一个额外的列表达式,对此进行折断,然后将其设置为不显示:

SQL> break on composite skip 1
SQ>> column composite noprint
SQL> select t.*, a||':'||b||':'||c as composite from your_table t;

         A B C D
---------- - - -
         1 a a a
         1 a a b

         1 a b c


3 rows selected.

其优点是,如果同时更改多个列,则不会显示多个空白行。

我用冒号分隔了这些值;这样的想法是使用一个不会出现在值本身中的字符,以避免意外冲突。如果任何一列实际上可以有一个冒号,则选择其他更晦涩的内容。