2013-02-08 2 views
0

У меня есть большой стол, но для целей данного вопроса, давайте предположим, что у меня есть происходит некорректно столбец strucure:Где Заявление ж/Distinct

enter image description here

я хотел бы иметь Где выражение, которое возвращает только строки, где адрес электронной почты отличается в этом конкретном столбце.

Мысли?

ответ

2

В большинстве баз данных, вы можете сделать это

select t.AccountId, t.BillingEmail 
from (select t.*, count(*) over (partition by BillingEmail) as cnt 
     from t 
    ) t 
where cnt = 1 

Преимущество этого подхода заключается в том, что вы можете получить столько столбцов, сколько вам нравится из таблицы.

3
SELECT BillingEMail 
FROM tableName 
GROUP BY BillingEMail 
HAVING COUNT(BillingEMail) = 1 

ИЛИ HAVING COUNT(*) = 1

Я не знаю, что RDBMS вы используете (причина, почему я не могу представить использования аналитических функций), но вы может сделать это, присоединившись к подзапросу, если вы хотите получить все столбцы

SELECT a.* 
FROM tableName a 
     INNER JOIN 
     (
     SELECT BillingEMail 
     FROM tableName 
     GROUP BY BillingEMail 
     HAVING COUNT(BillingEMail) = 1 
    )b ON a.BillingEMail = b.BillingEMail 
0

Я предпочитаю подход JW, но вот еще один, используя НЕ СУЩЕСТВУЮЩИЕ.

SELECT AccountID, [Billing Email] 
FROM table t1 
WHERE NOT EXISTS (
    -- Make sure that no other row contains the same 
    -- email, but a different Account ID. 
    SELECT 1 
    FROM table t2 
    WHERE t1.[Billing Email] = t2.[Billing Email] 
    AND t1.AccountID <> t2.AccountID 
) 
Смежные вопросы