SQL> select * from dept order by dname, loc;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
40 OPERATIONS BOSTON
20 RESEARCH DALLAS
30 SALES CHICAGO
设置我提到:
SQL> set recsep each
SQL> select * from dept order by dname, loc;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
40 OPERATIONS BOSTON
20 RESEARCH DALLAS
30 SALES CHICAGO
SQL>
SQL> with
2 your_query as
3 (select deptno, dname, loc,
4 --
5 row_number() over (order by dname, loc) rn,
6 count(*) over () cnt
7 from dept
8 ),
9 counter as
10 (select level rn
11 from dual
12 connect by level <= (select cnt
13 from your_query
14 where rownum = 1
15 )
16 ),
17 temp as
18 (select a.rn, a.deptno, a.dname, a.loc
19 from your_query a
20 union all
21 select b.rn, null, null, null
22 from counter b
23 )
24 select deptno, dname, loc
25 from temp
26 order by rn, deptno;
结果:
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
40 OPERATIONS BOSTON
20 RESEARCH DALLAS
30 SALES CHICAGO
8 rows selected.
SQL>
1条答案
按热度按时间mrfwxfqh1#
可能和许多其他社区成员一样,我不使用Navicat。我在谷歌上搜索过它--看起来像我见过的GUI工具(SQL Developer,TOAD),有很好的特性。我怀疑它是否有能力做你想做的事情。
您没有说明您打算如何处理这样的输出--是否将其假脱机到(CSV?)文件中?如果是这样,有一个解决方案:我使用SQL*Plus,它的
SET RECSEP
设置完全可以做到这一点,而不需要任何努力。这是默认值:
设置我提到:
很酷,不是吗?
否则,一个解决方案并不完全添加回车,而是添加空行。为此,我使用了几个CTE:
your_query
是您(我)的当前查询,具有两个附加列:rn
,返回行号,按所需列排序cnt
,返回查询返回的总行数counter
是一个行生成器,生成查询返回的行数(在我的示例中,我的查询返回4行;counter
也创建4行)temp
联合以下两个查询:rn
的查询联合,而其他列是null
。从视觉上看,它将返回您想要的结果(空行)rn
排序的有效列结果:
如果您想知道它在GUI中的外观,请查看以下内容(来自SQL Developer):