2016-02-03 51 views
0

我的select語句返回:顯示各組的總列在其自己的行

columnA ColumnB ColumnC DATE 
"this" 5  3  
"this" 5  3  
"this" 5  3  
"that" 10  5  
"that" 10  5  
"that" 10  5 

我需要我選擇回到這個:

columnA ColumnB ColumnC DATE 
"this" 5  3 
"this" 5  3 
"this" 5  3 
Total 15  9 
"that" 10  5 
"that" 10  5 
"that" 10  5 
Total 30  15 

我需要按列A分組,並顯示其自己行中的每個組的總數。日期填充在我的代碼中。

我所能想到的是選擇所有列A的可能性,然後循環遍歷columnA名稱,選擇所有列名稱,然後將每個列聯合起來。有一個更好的方法嗎?

+0

你可以簡單的寫彙總查詢,並做了UNION與你的SELECT語句,但這取決於你在DATE列中想要什麼。 –

回答

0

我認爲你可以用grouping sets來做到這一點。但是,您沒有每行的唯一標識符。所以,我覺得這是邏輯:

with t as (
     select t.*, row_number() over (order by (select null)) as seqnum 
     from (<your query here>) t 
    ) 
select columnA, sum(columnB), sum(ColumnC) 
from t 
group by grouping sets((seqnum, columnA), (columnA)); 
0

你可以試試這個,這會給結果按您的要求

select columnA,columnB,columnC from tablename 
union all 
select columnA,sum(columnB),SUM(columnC) 
from tablename group by col1 
order by columnA,columnB,columnC