2012-03-05 78 views
1

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

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 

有人能帮助我吗?

+1

数据表示不应该是查询结果的一部分。只需使用您的编程语言进行布局即可! – 2012-03-05 10:14:13

+1

计算(子)总计,透视表,隐藏值是报表工具可以轻松处理的所有任务。您可以计算总数,并通过使用UNION ALL将它们合并到您的结果集中,但报告工具可以使这些任务变得轻而易举,不要在SQL中执行它们。 – Wim 2012-03-05 10:19:27

+0

我通常不使用数据库引擎来格式化数据或设置布局的样式。在SQL Server中,“COMPUTE”子句允许您在查询底部添加一个聚合函数:也许Oralce中也有这样一个子句。格式化数据的快捷方式可能是使用spreadshhet来创建可读的报告。关于你的数据,我将使用一个数据透视表,其中“人”作为行标题,年份作为列标题,档案作为数据。 – 2012-03-05 10:21:20

回答

6

正如评论中指出的那样,这是一个客户端功能,而不是数据库之一。例如,如果您使用的是SQL * Plus,则可以使用:

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

第一行禁止重复的人员值;第二和第三在一起在底部产生总数。 SQL * Plus输出格式等记录在here

0

试试这个。它会给你至少总计但其余 或者可以用空值也使用RANK()用于pers_id 或在您的应用程序,如果任何的代码来代替......

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

希望它可以帮助升技