Sql 选择数据,如果重复id,则添加(求和)数据

Sql 选择数据,如果重复id,则添加(求和)数据,sql,tsql,select,distinct,case,Sql,Tsql,Select,Distinct,Case,我正在使用TSQL从数据库中选择数据。我想选择表中的所有数据,但如果id是重复的,则使用相同id添加所有列“a”,并使其仅为1行 输出中不应有重复的ID SELECT DISTINCT id,a,b FROM dbo.test WHERE id not in (select id from dbo.test) CASE a WHEN a + a?? 例如: dbo.test ======== id a 1 4 1 5 2 3 3 2 output

我正在使用TSQL从数据库中选择数据。我想选择表中的所有数据,但如果id是重复的,则使用相同id添加所有列“a”,并使其仅为1行

输出中不应有重复的ID

    SELECT DISTINCT id,a,b FROM dbo.test WHERE 
   id not in (select id from dbo.test) CASE a WHEN a + a?? 
例如:

dbo.test
========
id  a  
1   4  
1   5 
2   3
3   2

output:

1 9 <-- two ids of 1 so column 'a' is added together.
2 3
3 2
这就是分组和聚合的设计目的

仅供参考,这是聚合的工作原理:

对字段进行分组和聚合时,将记录合并到一行中

在OP中,您希望看到ID的每个值都有一个a的总和。我发布的原始查询就是这样做的

根据您的注释,您还希望包括B,这是一个varchar字段

在这种情况下,您需要决定如何处理B。由于您将多行分组在一起,每个ID值可能有多个B值。您需要:

也按B分组,这将添加额外的行 对B应用聚合,如最大值、最小值等 从结果列表中排除B。 这就是分组和聚合的设计目的

仅供参考,这是聚合的工作原理:

对字段进行分组和聚合时,将记录合并到一行中

在OP中,您希望看到ID的每个值都有一个a的总和。我发布的原始查询就是这样做的

根据您的注释,您还希望包括B,这是一个varchar字段

在这种情况下,您需要决定如何处理B。由于您将多行分组在一起,每个ID值可能有多个B值。您需要:

也按B分组,这将添加额外的行 对B应用聚合,如最大值、最小值等 从结果列表中排除B。
I get a在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句错误中。如果我也按B列分组,它可以工作,但我不想按B分组。只有ID.Error。B是瓦查尔。我应该让计数大于1吗?你想用B做什么?如果您只需要与ID关联的任何B记录,您可以获得一个最大值。我不想触摸B。每行它应该保持不变。如果ID相同,则只有A应该更改。那么,我认为您不了解聚合是如何工作的。我将发布一个编辑来为您解释。我得到一个在选择列表中是无效的,因为它既不包含在聚合函数中,也不包含在GROUP BY子句错误中。如果我也按B列分组,它可以工作,但我不想按B分组。只有ID.Error。B是瓦查尔。我应该让计数大于1吗?你想用B做什么?如果您只需要与ID关联的任何B记录,您可以获得一个最大值。我不想触摸B。每行它应该保持不变。如果ID相同,则只有A应该更改。那么,我认为您不了解聚合是如何工作的。我会发布一个编辑来为你解释。
SELECT ID, SUM(a) as a, SUM(b) as B
FROM MyTable
GROUP BY ID