2016-03-03 68 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)