PL / SQL:中心查询结果

时间:2017-10-27 22:31:15

标签: oracle formatting sqlplus

我用google搜索了解Google的所有信息。我需要一些新的眼睛来看待它。

我试图将查询的结果集中在一起。这是我到目前为止所拥有的......

    set lines 2000 pages 2000
    COLUMN total HEADING "Total" FORMAT A20 JUSTIFY CENTER
    COLUMN sending_fi HEADING "Sending M" FORMAT A20 JUSTIFY CENTER
    COLUMN receiving_fi HEADING "Receiving M" FORMAT A20 JUSTIFY CENTER
    COLUMN status HEADING "Payment Status" FORMAT A20 JUSTIFY CENTER
    SET UNDERLINE =
    select
        count(*) as "Total",
        p.sending_fi,
        p.receiving_fi,
        p.status
    from
        my_schema.my_table p
    where
        p.match_date
            between
                to_date
                    (
                        '2017/10/26:00:00:00',
                        'yyyy/mm/dd:hh24:mi:ss'
                    )
            and
                to_date
                    (
                        '2017/10/28:23:59:59',
                        'yyyy/mm/dd:hh24:mi:ss'
                    )
    and
        p.expedited='1'
    and
        p.status='DELIVERED'
    group by
        p.sending_fi,
        p.receiving_fi,
        p.status
    order by
        1
        DESC
    ;

产生此输出......

Total Sending M Receiving M Payment Status
==================== ==================== ==================== ================= 266759 BAC BAC DELIVERED
49954 JPM BAC DELIVERED
45194 BAC JPM DELIVERED
25990 WFC BAC DELIVERED
25676 JPM WFC DELIVERED
24120 WFC JPM DELIVERED
23565 BAC WFC DELIVERED

COLUMN HEADERS(姓名)是居中的,但就我而言,我无法弄清楚如何将结果集中。

我是一个非特权用户(我所做的一切都是选择更新和插入),SQL技能非常有限。请温柔地提出建议。

3 个答案:

答案 0 :(得分:1)

您可以使用LPAD。

这是一个简单的例子:

COLUMN blks HEADING "Num Blocks" FORMAT A10 JUSTIFY CENTER

select 
lpad(to_char(blocks),(10-length(to_char(blocks)))/2+length(to_char(blocks)),' ') blks 
from user_segments
where rownum < 11;

我们的想法是填充左侧的列,格式大小与空格中列值的大小之差有一半。

输出:

Num Blocks
----------
    16
    16
    16
    16
    16
    16
    16
    16
    16
    16

10 rows selected.

巴比

答案 1 :(得分:1)

最初我把它写成评论。然后我想把这个问题作为副本来结束;但我发现的唯一重复没有答案:只是评论说同样的事情。 (我应该知道,那也是我的评论!)

Column Formatting JUSTIFY not working

<强> ANSWER

看起来你想在SQL * Plus中找到答案。 没有答案。字符串和日期始终与列的左侧对齐,而数字则在右侧。期。你不能改变它(除了在查询中添加字符串本身 - 通过用空格填充;完全浪费时间!)如果你需要生成“漂亮的”报告,以及SQL *中可用的内容加上不够好,你必须使用报告工具;无法在SQL * Plus中完成。

似乎有一些关于SQL命令COLUMN ... FORMAT ... JUSTIFY的混淆。以下是手册所说的内容:

JUS [TIFY] {L [EFT] | C [ENTER] | [R [IGHT]}

对齐标题。如果您不使用JUSTIFY子句,则NUMBER列的标题默认为RIGHT,其他列类型的标题默认为LEFT。

https://docs.oracle.com/cd/B19306_01/server.102/b14357/ch12013.htm#BACHCABF

答案 2 :(得分:0)

Bobby的回答适用于文本输出。您还可以使用sqlplus的HTML标记功能并生成格式化的html输出。扩展https://docs.oracle.com/database/121/SQPUG/ch_seven.htm#SQPUG531的示例是

create table t1 (
id number
, dt date 
, vc varchar2(20) 
, constraint pk_t1 primary key (id) );

begin     
for i in 1..10 loop
 insert into t1 values (i,sysdate + i , 'Row '||i);
end loop;
commit;
end;
/

SET MARKUP HTML ON PREFORMAT OFF ENTMAP ON -
HEAD "<TITLE>Department Report</TITLE> -
<STYLE type='text/css'> -
<!-- BODY {background: #FFFFC6} --> -
<!-- TD { text-align: center} --> -
</STYLE>" -
BODY "TEXT='#FF00Ff'" -
TABLE "WIDTH='90%' BORDER='5'"

然后运行

spool t.html

然后是您的查询,然后是

host firefox t.html