Sql server Sum和Group By子句

Sql server Sum和Group By子句,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我有一张如下所示的表格 Name Id Sub1 Sub2 Raj 1 75 76 Ramesh 2 85 58 Sekhar 3 65 55 Siddharth 4 95 85 Raj 1

我有一张如下所示的表格

Name Id Sub1 Sub2 Raj 1 75 76 Ramesh 2 85 58 Sekhar 3 65 55 Siddharth 4 95 85 Raj 1 52 75 Sekhar 3 97 95 Siddharth 5 78 85 名称Id Sub1 Sub2 拉吉17576 拉梅什28558 塞哈尔36555 悉尼4 95 85 拉吉15275 塞哈尔39795 悉尼5 78 85 我需要如下输出

Name Id Sub1 Sub2 Raj 1 127 151 Ramesh 2 85 58 Sekhar 3 162 150 Siddharth 4 95 85 Siddharth 5 78 85 名称Id Sub1 Sub2 拉吉1127151 拉梅什28558 塞哈尔3 162 150 悉尼4 95 85 悉尼5 78 85 也就是说,我需要在subject列和group by Id列中求出标记的总和。我需要显示名称,但它不应包含在GroupBy子句中。
如何编写查询以获得所需的结果?提前感谢。

在所有的澄清之后,看起来它实际上就像以下一样简单:

select Name
  , Id
  , Sub1 = sum(Sub1)
  , Sub2 = sum(Sub2)
from MyTable
group by Name, Id
order by Id
.

试试这个:-

with cte as 
(  Select row_number() over(partition by a.id order by a.ID) rn,
   a.name,a.id , b.sum1, b.sum2  from
   sample a
   inner join 
  ( Select id,sum(sub1) Sum1,sum(sub2) as sum2 
    from Sample 
    group by id)b
  on a.id=b.id
)
Select name,id,sum1,sum2 from cte where rn=1
或者您也可以在子查询中使用
Sum
Over
子句

 Select *
 from 
 (
  Select name,id,sum(sub1) over (partition by id) sub1,
  sum(sub2) over(partition by id) sub2,
  row_number() over(partition by Id order by id) rn
  from sample
 ) s
 where rn=1 
 order by s.name

Demo

如果需要从group by子句中排除
Name
,假设您的id是唯一标识符,并且只有id只分配给一个名称,则使用
MAX()聚合
Name


例如,如果ID2被分组,这意味着显示的名称应该是Ramesh(first=min(name))或Sekhar(last=max(name))?如果列不包含在group by子句中,您必须决定如何聚合这些列。
Sekhar
的真实ID是什么?是
2
还是
3
?为什么
sub2
中Raj的
sum
是152,应该是
76+75=151
shekhar
55
?对不起,我错过了计算。。让我修改一下,名称列不能包含在GroupBy子句中。这就是我遇到的问题。为什么不能将名称包含在GroupBy中?您正在查询结果中显示它,因此应该包括它。查询结果正是您所需要的。就像在我的实际场景中,我有更多的列,如地址、名字、姓氏。所以有可能是地址被修改了,所以我不能在groupby子句中包含所有这些列。很抱歉没有列出所有这些列。您需要在问题中提供更多信息,然后。。。所有内容都存储在同一张表中吗?是否有另一个表以最新形式存储您需要的信息?您需要显示一个特定的示例,显示列在表中的修改位置以及在最终结果集中如何处理它。是的,所有内容都存储在同一个表中。是否有其他方法将名称添加到结果中,而不将其包含在GroupBy子句中?基于对该问题的各种评论/澄清,我认为这里的第二个查询看起来是可用的最佳选项。唯一缺少的是一个更好的列,用于排序
行号
子句;仅按Id排序无法保证结果的一致性。希望OP可以提供更多关于表的信息,也许可以在
行号
中使用某种时间列,这样一切都可以正常工作。第二个查询对我来说很有用,很容易理解。。。非常感谢。
SELECT
    MAX(Name) AS [Name]
   ,Id
   ,SUM(Sub1) AS [Sub1]
   ,SUM(Sub2) AS [Sub2]

FROM
    MyTable

GROUP BY
    Id

ORDER BY
    Id