2017-09-18 50 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代码可以进行求和......只是一个想法