Sql 选择数据,如果重复id,则添加(求和)数据
我正在使用TSQL从数据库中选择数据。我想选择表中的所有数据,但如果id是重复的,则使用相同id添加所有列“a”,并使其仅为1行 输出中不应有重复的IDSql 选择数据,如果重复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
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