【问题标题】:prettify output of query美化查询的输出
【发布时间】:2012-03-05 18:47:04
【问题描述】:

我有这个查询,想缩进输出并从最后一列获取总数。 现在它给出了

person                                          |year|dossiers
------------------------------------------------|----|--------
9210124                                         |1110|     166
9210124                                         |1111|     198
9210124                                         |1112|     162
9210161                                         |1110|     183
9210161                                         |1111|     210
9210161                                         |1112|     142

我想拥有

person                                          |year|dossiers
------------------------------------------------|----|--------
9210124                                         |1110|     166
                                                |1111|     198
                                                |1112|     162
9210161                                         |1110|     183
                                                |1111|     210
                                                |1112|     142
total                                                     1061

这里是查询

select  
 pers_nr "person",   
 to_char(import_dt,'YYMM') "year and month",  
 count(pers_nr) "dossiers"   
from   
  rdms_3codon  
where  
 trunc(import_dt) >= trunc(trunc(sysdate, 'Q') -1, 'Q') 
 and trunc(import_dt) < trunc(sysdate, 'Q')-1/(24*60*60) 
group by   
 pers_nr,   
 to_char(import_dt,'YYMM')   
order by  
 pers_nr  

有人可以帮帮我吗?

【问题讨论】:

  • 数据展示不应该是查询结果的一部分。只需使用您的编程语言进行布局!
  • 计算(子)总计、透视表、隐藏值都是您的报告工具可以轻松处理的任务。您可以计算总数并使用 UNION ALL 将它们合并到您的结果集中,但是报告工具可以让这些任务变得轻而易举,不要在 SQL 中执行它们。
  • 我通常不使用 db 引擎来格式化数据或设置布局样式。在 SQL Server 中,“COMPUTE”子句允许您在查询的底部添加一个聚合函数:也许 Oralce 中也有这样的子句。格式化数据的一种快速方法是使用电子表格创建可读的报告。关于您的数据,我会使用一个数据透视表,其中“人”作为行标题,年份作为列标题,档案作为数据。
  • 感谢 cmets,但我有一个 web 应用程序,它的报告只是存储在数据库中的 sql,非常方便快速提供报告,输出在网格中抽取,因为各种使用报告我想为一些报告提供一些基本的输出

标签: sql oracle layout


【解决方案1】:

如 cmets 中所述,这是一个客户端功能,而不是数据库功能。例如,如果您使用的是 SQL*Plus,则可以使用:

break on person
break on report
compute sum label total of dossiers on report

第一行抑制了重复的 person 值;第二个和第三个一起在底部生成总数。 SQL*Plus 输出格式等记录在here。

【讨论】:

    【解决方案2】:

    试试这个。它至少会给你总数,但其余的 两者都可以用 NULL 替换,也可以将 RANK() 用于 pers_id 或在您的应用程序代码中(如果有)...

    select  
     pers_nr "person",   
     to_char(import_dt,'YYMM') "year and month",  
     SUM(count(pers_nr)) OVER (ORDER BY year)
    FROM ....
    

    希望对你有所帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-29
      • 2016-02-08
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 2013-01-10
      • 1970-01-01
      • 2015-08-28
      相关资源
      最近更新 更多