2017-09-18 78 views
1

我有以下列的財務表: | ID |年|月|值| ,我的選擇是:選擇語句的sql總數

SELECT VALUE, YEAR, MONTH 
FROM FINANCE GROUP BY YEAR 

,其結果是:

3056.25, 2015, I 
3445.62, 2015, II 
3445.62, 2015, III 
9251.22, 2015, IV 
3445.62, 2015, V 
8102.00, 2015, VI 
8753.25, 2015, VII 
3204.00, 2015, XIII 
6555.25, 2015, IX 
3206.00, 2015, X 
3057.25, 2015, XI 
2010.00, 2015, XII 
1056.25, 2016, I 
4000.00, 2016, II 

我想要做的,就是每一年後能得到彙總,例如:

3056.25, 2015, I 
3445.62, 2015, II 
9251.22, 2015, IV 
8102.00, 2015, VI 
8753.25, 2015, VII 
3204.00, 2015, XIII 
6555.25, 2015, IX 
3206.00, 2015, X 
3057.25, 2015, XI 
2010.00, 2015, XII 
**57532,08, 2015,NULL** 
1056.25, 2016, I 
4000.00, 2016, II 
**5056,25, 2016, NULL** 

如何實現這個?

+1

*在客戶端*可能是最好的答案。請爲您正在使用的特定數據庫添加標籤。 –

+0

我寧願在一個報告工具如ssrs中執行此操作,但是,如果您需要在ssms中使用此工具,那麼您可以使用1的聯合來細化組合和,然後按順序你的組字段和計算的聯合字段。 –

+0

查詢不會運行,因爲它沒有month和group by中的值。 – sia

回答

3

你可以使用UNION ALL添加agregated值:

SELECT VALUE, YEAR, MONTH 
FROM finance 
UNION ALL 
SELECT SUM(VALUE), YEAR, NULL 
FROM finance 
GROUP BY YEAR 
ORDER BY YEAR, CASE WHEN MONTH = 'I' THEN 1 
        WHEN MONTH = 'II' THEN 2 
        ... 
        ELSE 13 
       END; 
1

我想你可能想在你的使用情況使用GROUP BY ROLLUP或CUBE。 Cube將爲您提供組中各個字段的組合。

試試這個:

SELECT VALUE, YEAR, MONTH 
FROM finance -- gives you the data like you have it 
UNION ALL 
SELECT sum(VALUE), YEAR, MONTH 
FROM FINANCE GROUP BY CUBE (YEAR, MONTH) -- appends the SUM combinations of all dimensions 

如果立方體爲您提供了「太多」嘗試彙總...彙總將由條款

保持排序層次中的組中,但實際上,如果你想返回所有的數據,以及聚合到應用程序,你可能不會打擾數據庫端的聚合,因爲APP代碼可以進行求和......只是一個想法