Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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
Sql 对包含重复项的表中的列值求和_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql 对包含重复项的表中的列值求和

Sql 对包含重复项的表中的列值求和,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一张表,上面有这样的副本: ClassId Name Days SpecHours 1 Jack 250 130 1 Jack 250 130 1 Jack 250 120 2 Mike 300 130 … 我想要的是对非重复项求和。我的预期产出是: ClassId Name Days totalSpecHours 1 Jack 250

我有一张表,上面有这样的副本:

ClassId Name    Days    SpecHours   
1       Jack    250     130
1       Jack    250     130
1       Jack    250     120
2       Mike    300     130
…
我想要的是对非重复项求和。我的预期产出是:

ClassId Name    Days    totalSpecHours  
1       Jack    250     250
2       Mike    300     130
我无法计算总的工作时间。我正在尝试使用下面类似的东西,但它不能正常工作

totalSpecHours = sum(distinct SpecHours)
我尝试下面的等式,但它也不起作用,但我想我需要这样的东西。如果有人帮忙,我会很感激的。谢谢

totalSpecHours= (sum(X.SpecHours in (select mt.ClassId, mt.SpecHours from myTable mt group by mt.ClassId, mt.SpecHours) as X))
干杯

编辑:答案为Ty,最正确。已选择第一个答案作为正确答案。谢谢大家

尝试此查询:

select 
 classID, 
 Name, 
 Days, 
 sum(specHours) as TotalSpecHours 
from 
 (
 select distinct ClassId, Name, Days, SpecHours from myTable )t
  group by classID, Name, Days
逻辑:

我们在内部查询中获取不同的值,然后对这个结果集进行分组,然后得到总和。 请注意,内部查询只计算一次,因此没有性能问题。

尝试此查询:

select 
 classID, 
 Name, 
 Days, 
 sum(specHours) as TotalSpecHours 
from 
 (
 select distinct ClassId, Name, Days, SpecHours from myTable )t
  group by classID, Name, Days
逻辑:

我们在内部查询中获取不同的值,然后对这个结果集进行分组,然后得到总和。
请注意,内部查询只计算一次,因此没有性能问题。

这样的操作不应该起作用吗

SELECT ClassId, Name, Days, SUM(SpecHours) AS totalSpecHours 
FROM (
    SELECT DISTINCT ClassId, Name, Days, SpecHours
    FROM Table 
) outer
GROUP BY ClassId, Name, Days

这样的事情不应该奏效吗

SELECT ClassId, Name, Days, SUM(SpecHours) AS totalSpecHours 
FROM (
    SELECT DISTINCT ClassId, Name, Days, SpecHours
    FROM Table 
) outer
GROUP BY ClassId, Name, Days
使用分组方式:

SELECT ClassId, Name, Days, SUM(totalSpecHours) FROM
(
    SELECT ClassId, Name, Days, SpecHours AS totalSpecHours 
    FROM TableName GROUP BY ClassId, Name, Days, SpecHours
)
使用分组方式:

SELECT ClassId, Name, Days, SUM(totalSpecHours) FROM
(
    SELECT ClassId, Name, Days, SpecHours AS totalSpecHours 
    FROM TableName GROUP BY ClassId, Name, Days, SpecHours
)
您可以使用CTE(公共表表达式)

您可以使用CTE(公共表表达式)


德鲁夫乔希击败了我:)德鲁夫乔希击败了我:)而不是落选的选民。但OP不想对绝对重复行求和。@DhruvJoshi:啊。修正了这个问题。但OP不想对绝对重复行求和。@DhruvJoshi:啊。FixedOp不想计算重复的规格小时数Op不想计算重复的规格小时数