2017-09-18 2 views
1

次の列のテーブルFinanceがあります。 | ID |年|月|値|select文の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の集約で、合計については2の集約でグループ合計をエミュレートできます。あなたのグループフィールドと計算された結合フィールド。 –

+0

グループの月と値がないため、クエリは実行されません。 – sia

答えて

3

あなたはagregated値を追加するUNION ALLを使用することができます。

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

私はあなたのユースケースにROLLUPまたはCUBE、GROUP BYを使用したいかもしれないと思います。 キューブはあなたのグループ内のフィールドのすべての組み合わせを提供します。

このお試しください:キューブはあなたにロールアップしてみてください「すぎ」を与える場合は、返すようにしたい場合は...ロールアップは、句

しかし、現実的にして、グループ内の順序階層を維持します

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コードが集計を行うことができるため、DB側での集計に気をつけないかもしれません。ちょっと考えてください。