2016-02-25 2 views
0

У меня есть таблица со столбцами:SQL: Удаление всех строк, которые повторяются значениями

Acct_no, PSTL_CODE, NAME, phone 

Я пытаюсь избавиться от всех строки, которые разделяют один и тот же PSTL_CODE и телефона (т.е. сбрасывать те, где есть свои & ее счета и подобные сценарии)

Я стянул следующий, который я думаю, должен возвращать только строки с уникальным PSTL_CODE:

SELECT * FROM Sheet1 
WHERE PSTL_CODE IN 
(SELECT PSTL_CODE FROM SHEET1 
GROUP BY PSTL_CODE HAVING COUNT(PSTL_CODE) =1) 
ORDER BY phone 

и это близко-иш, но она по-прежнему состоит из одной записи, где есть два счета в том же PSTL_CODE.

и я застрял с Access 2007, так что я не могу сделать:

SELECT * FROM Sheet1 
EXCEPT 
(SELECT PSTL_CODE FROM SHEET1 
GROUP BY PSTL CODE HAVING COUNT(*) >1) 
ORDER BY phone 

для того, чтобы просто косу прочь кратные.

Помощь!

+0

Образец данных и выход желаний поможет вам понять ваш вопрос. Пожалуйста, прочитайте [** How-to-Ask **] (http://stackoverflow.com/help/how-to-ask) \t \t И вот отличное место для [** START **] (http : //spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/), чтобы узнать, как улучшить качество вопроса и получить лучшие ответы. –

+0

Вы проверили 'DISTINCT'? http://www.techonthenet.com/access/queries/unique_values2007.php –

+0

Я бы поставил под сомнение вашу логику здесь, вы действительно пытаетесь избавиться от обеих записей? Должен ли оставаться 1? И кажется, что acct_No должен быть движущим фактором для дубликатов. те, кто живет по тому же адресу, могут иметь свой собственный аккаунт, но все же имеют номера телефонов. Здесь важны ваши потребности в бизнесе. – xQbert

ответ

0

Попробуйте использовать Exists

Учитывая, что ваша уникальная комбинация PSTL_CODE и phone

SELECT * 
FROM sheet1 a 
WHERE EXISTS (SELECT 1 
       FROM sheet1 b 
       WHERE a.pstl_code = b.pstl_code 
         AND a.phone = b.phone 
       HAVING Count(*) = 1) 
ORDER BY phone 

Лучше определить Unique Constraint на PSTL_CODE и phone колонн, которые помогают вам избежать повторяющихся записей в таблице

+0

Фантастический, выход выглядит спот-на! – DJNW

0

Если я правильно понимаю бизнес-логику, вы пытаетесь устранить пары, живущие t ogether из запроса. вы также группируетесь по телефону, что, по-видимому, вызывает ошибку. Есть ли логическая причина для двух человек, чтобы жить в одном месте, но иметь разные номера телефонов. например, мобильные телефоны?

+0

Я, хотя ORDER BY, просто отсортировал вывод, но на самом деле ничего не сделал с данными? Одна из вещей, которые я делаю с данными, - это поиск людей, которые владеют несколькими учетными записями, но не обновляли данные адреса для каждой учетной записи при перемещении дома. – DJNW

0

Один из подходов заключается в создании набора уникальных телефонов, почтовых кодов, которые являются дубликатами, а затем LEFT соединяют ваш базовый набор с сгенерированным набором, где postal_Code имеет значение NULL.

Select * 
FROM SHEET1 A 
LEFT JOIN (
    Select count(*) as cnt pstl_Code, phone 
    From sheet1 
    group by pstl_Code, phone 
    having count(*) > 1) B 
on A.Pstl_Code = B.Pstl_Code 
and A.Phone = B.Phone 
where B.pstl_Code is null and b.phone is null 
Смежные вопросы