2014-04-07 120 views
2

超過1個值簡化這裏的東西是我的表結構:查找記錄在SQL

表名:OCRD

CardCode  E_Mail   U_NoEmail 
123   [email protected]  Y 
124   [email protected]  N 
125   [email protected] Y 
126   [email protected]  N 

表包含一個唯一的ID,一個電子郵件地址,和第三列(U_NoEmail),其中顯示電子郵件的優先級爲opted in或不給電子郵件。這有點違反直覺,Y = Opted輸出,N = Opted InU_NoEmail列也可以是NULL

我想對此表使用單個查詢來返回一個計數。計數是表格中U_NoEmail具有多個值的電子郵件地址數。換句話說,我希望找到加入和退出的電子郵件地址總數,從業務角度來看,這並不會有幫助。

我不知道如何做到這一點。例如,我可以通過電子郵件地址與下面的查詢得到這樣的:

SELECT E_Mail, COUNT(DISTINCT E_Mail) 
FROM OCRD 
GROUP BY E_Mail 
HAVING COUNT(DISTINCT U_NoEMail) > 1 

這將返回所有與U_NoEmail多個值的地址。但我無法弄清楚如何將這個作爲一個單獨的總數。如果我嘗試以下方法:

SELECT COUNT(*) FROM 
(
SELECT E_Mail, COUNT(DISTINCT E_Mail) 
FROM OCRD 
GROUP BY E_Mail 
HAVING COUNT(DISTINCT U_NoEMail) > 1 
) result 

我得到的錯誤:「結果」 2列指定 沒有列。

回答

1
SELECT COUNT(*) FROM 
(
SELECT E_Mail, COUNT(DISTINCT E_Mail) AS EmailCount 
FROM OCRD 
GROUP BY E_Mail 
HAVING COUNT(DISTINCT U_NoEMail) > 1 
) result 
+0

謝謝,這工作完美。知道我錯過了一些東西! – user3498450

4

試試這個,你應該在子查詢

SELECT COUNT(*) FROM 
(
SELECT E_Mail, COUNT(DISTINCT E_Mail) **as distEmail** 
FROM OCRD 
GROUP BY E_Mail 
HAVING COUNT(DISTINCT U_NoEMail) > 1 
) result 
+0

謝謝你給的名字對每列,這個解決方案也能正常工作,只能選擇一個答案。感謝幫助! – user3498450

+0

沒問題,朋友,你可以upvote! – AK47