在SQL中查找具有多于1列值的记录

时间:2014-04-07 15:55:30

标签: sql

为了简化这里的事情,我的表结构是:

表名:OCRD

CardCode       E_Mail          U_NoEmail
123            test@hi.com     Y
124            test@hi.com     N
125            other@hi.com    Y
126            mail@hi.com     N

该表格包含唯一ID,电子邮件地址和第三列(U_NoEmail),其中显示电子邮件的首选项为opted in或不是电子邮件。这有点违反直觉,Y =选择退出,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列指定列。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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