select语句的sql求和
我有以下列的表Finance: |ID |年|月|值| 我的选择是:select语句的sql求和,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有以下列的表Finance: |ID |年|月|值| 我的选择是: 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,
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**
如何实现这一点?您可以使用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;
您可以使用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;
我认为您可能希望在用例中使用分组汇总或多维数据集。 多维数据集将为您提供组中所有字段的组合 试试这个:
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
如果多维数据集给您太多,请尝试汇总…汇总将在GROUPBY子句中维护排序层次结构
但实际上,如果您想将所有数据连同聚合一起返回到应用程序,您最好不要在DB端进行聚合,因为应用程序代码可以进行求和…只是一个想法,我想您可能希望在您的用例中使用GROUP BY ROLLUP或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
如果多维数据集给您太多,请尝试汇总…汇总将在GROUPBY子句中维护排序层次结构
但实际上,如果您想将所有数据连同聚合一起返回到应用程序,您最好不要在DB端进行聚合,因为应用程序代码可以进行求和……只要想一想,在客户端执行就可能是最好的答案。请为您正在使用的特定数据库添加标记。我更希望在ssrs等报告工具中执行此操作,但是,如果您需要在ssms中执行此操作,然后,您可以使用1的并集模拟组和,使用2的并集模拟组和,然后按组字段和计算的并集字段排序。查询将不会运行,因为它在group by中没有月份和值。在客户端中执行可能是最佳答案。请为您正在使用的特定数据库添加标记。我更希望在ssrs等报告工具中执行此操作,但是,如果您需要在ssms中执行此操作,然后,您可以模拟组和,详细信息的并集为1,总和的并集为2,然后按组字段和计算的并集字段排序。查询将不会运行,因为它在group by中没有月和值。