2016-03-03 33 views
1

我有一个表像重复:在表中总结的列值,包括重复

ClassId Name Days SpecHours 
1  Jack 250  130 
1  Jack 250  130 
1  Jack 250  120 
2  Mike 300  130 
… 

我想是总结totalSpecHours非重复。我的预期输出是:

ClassId Name Days totalSpecHours 
1  Jack 250  250 
2  Mike 300  130 

我无法设法计算totalSpecHours。我正在尝试使用类似于下面的内容,但无法正常工作。

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为答案,最正确的。第一个答案被选为正确答案。赞赏所有!

回答

3

尝试此查询:

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

逻辑:

我们采取在内部查询不同的值,然后在这个结果集,我们通过做一组,得到的总和。 请注意,内部查询只评估一次,所以没有性能问题。

2

不应该像这样的工作?

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

DhruvJoshi打我吧:) – jorgesalvador

0

使用组借:

SELECT ClassId, Name, Days, SUM(totalSpecHours) FROM 
(
    SELECT ClassId, Name, Days, SpecHours AS totalSpecHours 
    FROM TableName GROUP BY ClassId, Name, Days, SpecHours 
) 
+0

Downvoter。它出什么问题了? – dotNET

+0

不是downvoter。但OP不想总和绝对重复的行。 – DhruvJoshi

+1

@DhruvJoshi:啊。修正了 – dotNET

0

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

With CTE_Values as 
(
Select distinct ClassID, SpecHours From MyTable 
) 
Select Sum(SpecHours) From CTE_Values 
+0

如果重复,则不想计算小时数 – TheGameiswar

0
with cte 
as 
(
select 
classid,name,days,spechours,row_number() over (partition by classid,name,days,spechours order by spechours) as rn 
from yourtable 

) 
select sum(spechours) 
from cte c1 
where not exists(select 1 from cte c2 where c1.classid=c2.classid and c1.rn>1)