首页 > 解决方案 > 如何为同一行中的一组 EmpId 显示“值”[列]和“所有此类值的总和”[行方式]

问题描述

如何为同一行中的一组 EmpId 显示“值”[列]和“所有此类值的总和”[行方式]。

SELECT ID, SUM(VALUE1), SUM(VALUE2) 
GROUP BY EmpID 

上面的查询将返回总和,但我也想在同一行中显示 Value1 和 Value2 的值。

例如

我有以下输入表:

EmpID  VALUE1  VALUE2
==================
1       1       5         
1       2       6         
2       3       7         
2       4       8

我想要以下输出表(按 EmpID 分组)-> Value1、Value2 及其总和在同一行中

EmpID  Value1  VALUE2  total_Value1   total_Value2
===============================================
1       1       5         3               11
1       2       6         3               11
2       3       7         7               15     
2       4       8         7               15 

标签: sqlsql-servertsql

解决方案


使用SUM() OVER(PARTITION BY)窗口函数,您可以获得预期的结果:

SELECT EmpID, VALUE1, VALUE2,
       SUM(VALUE1) OVER (PARTITION BY EmpID) AS total_Value1,   
       SUM(VALUE2) OVER (PARTITION BY EmpID) AS total_Value2
FROM TableName

db<>fiddle 上的演示


推荐阅读