Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
select语句的sql求和_Sql_Sql Server_Tsql - Fatal编程技术网

select语句的sql求和

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,

我有以下列的表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, 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中没有月和值。