2012-03-05 51 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 .... 

希望它可以幫助升技