2012-08-09 41 views
1

如何爲指定行計數一次,即使該行存在多次?如何只爲指定記錄計數一次?

比如我有一個SQL查詢

SELECT COUNT(Date) 
FROM mytable 
WHERE name like '%John%' 

但它計算所有約翰的電話號碼。我需要的是,如果我找到一個名字John,我只想計算一次,不管約翰的名字存在多於一次。

爲了說明

Name  Date 
John  06-09-2012 1am 
Robert  06-09-2012 2am 
John  06-09-2012 3am 
John  06-09-2012 4am 
Robert  06-09-2012 5am 

結果應該是1約翰。

+0

結果將是最高的一個/最低的一個? – 2012-08-09 06:16:55

+1

你的意思是忽略時間組件? http://stackoverflow.com/a/113055/570150 – V4Vendetta 2012-08-09 06:20:03

+0

我的意圖是統計每個約翰每天的外觀,但我沒有提到這一點。如果你用這種方式考慮,如何編寫sql查詢? – 2012-08-09 06:23:17

回答

1

您需要COUNTDistinct Date,也需要使用GROUP BY條款是這樣的:

SELECT Name,COUNT(DISTINCT CONVERT(varchar,date,103)) AS NameCount 
FROM mytable WHERE name LIKE '%John%' 
GROUP BY name 

SEE THIS FIDDLEname LIKE '%John%'

而且,對於每個用戶試試這個:

SELECT Name,COUNT(DISTINCT CONVERT(varchar,date,103)) AS NameCount 
FROM mytable GROUP BY name 

SEE THIS FIDDLE爲每個用戶。

+0

非常感謝你..... – 2012-08-09 06:47:42

+0

@JohnSmith再次看到更好的答案。 – hims056 2012-08-09 06:55:18

-1

更新查詢按明確的要求

對於Oracle

SELECT COUNT(不同(摘自日當天))FROM mytable的WHERE名 LIKE '%約翰%' 和日期不爲空;

+0

謝謝,那麼每天計算每個名字呢?結果應爲06-09-2012爲1,名稱= john,07-09-2012爲1,名稱= john。所以,約翰應該每天計算一次。我怎樣才能做到這一點 ? – 2012-08-09 06:35:19

+0

@JohnSmith [看到這個答案](http://stackoverflow.com/questions/11877717/how-to-count-only-once-for-a-specified-record/11877846#11877846)。這正是你想要的。 – hims056 2012-08-09 06:37:56

+0

對不起,我第一次沒有問你,通過@ hims056回答會解決你的問題 – Kamal 2012-08-09 06:52:41