2016-11-21 75 views
1

我有以下見下表:候選編號重複獲得如何獲得重複計數值的總和?

CandidateId CandidateName 
    can132  Mazhar 
    can132  Mazhar 
    can133  Raj 
    can133  Raj 
    can134  Rahul 
    can134  Rahul 
    can134  Rahul 

我的SQL查詢的基礎。

SELECT CandidateId, COUNT(*) as duplicate 
FROM Table_CandidateInfo_Preview 
GROUP BY CandidateId 
HAVING COUNT(*) > 1 
ORDER BY CandidateId 

右鍵我得到以下的輸出:

CandidateId  duplicate 
can132   2 
can133   2 
can134   3 

我需要得到像終值4送我的輸出參數在我的存儲過程,因爲三個候選編號有重複和cand132 1次,cand133 1時間和can134 2次。所有的總和將得到4值。

回答

0

將您的查詢放在派生表中(略微調整)。 SUM其重複的值:

select sum(duplicate) 
from 
(
    SELECT CandidateId, COUNT(*) - 1 as duplicate 
    FROM Table_CandidateInfo_Preview 
    GROUP BY CandidateId 
    HAVING COUNT(*) > 1 
) dt 
+0

非常感謝你。 @jarlh – zahed

+0

不客氣! – jarlh

+0

如果像我的問題,請投票。 @jarlh – zahed

0

你似乎想:​​

SELECT SUM(duplicate - 1) 
FROM (SELECT CandidateId, COUNT(*) as duplicate 
     FROM Table_CandidateInfo_Preview 
     GROUP BY CandidateId 
     HAVING COUNT(*) > 1 
    ) c; 

我要說明的是,如果你有每一行的唯一ID,那麼你也可以這樣做:

select count(*) 
from Table_CandidateInfo_Preview cip 
where cip.id > (select min(cip2.id) 
       from Table_CandidateInfo_Preview cip2 
       where cip2.CandidateId = cip.CandidateId 
       ); 

對我來說,這看起來像是一個「重複」的更直接計數。我還應該注意到,一些數據庫(如SQLite,Oracle和Postgres)具有可用於此目的的一種或另一種形式的行標識符。

0
SELECT sum(result.duplicate) AS Summary FROM (
SELECT CandidateId, COUNT(*) as duplicate 
FROM Table_CandidateInfo_Preview 
GROUP BY CandidateId 
HAVING COUNT(*) > 1) as result 
  1. 試試這個我認爲這將有助於