Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > выборка повторов из1 таблицы


Автор: Ivushka 25.1.2006, 13:28
Помогите исправить ошибки ламеров!!!

таблица содержит ID ФИО и др.данные
только народ навводил одних и тех же людей... причем криво например фамилии и имена совпадают а отчества "Олегович" и "О." и тд...

если делать группировку только по фамилии попадаются однофамильцы а как еще выбрать не соображу(((

к тому же нужно сделать так
из этого
id фио
1 а
2 р
3 у
4 а
5 у
6 а
7 й
выбрать
id фио
1 а
4 а
6 а
2 у
5 у


помоготе!







Автор: ТоляМБА 25.1.2006, 13:50
Цитата(Ivushka @ 25.1.2006, 13:28 Найти цитируемый пост)

таблица содержит ID ФИО и др.данные

Цитата(Ivushka @ 25.1.2006, 13:28 Найти цитируемый пост)

если делать группировку только по фамилии попадаются однофамильцы

Так, подожди, у тебя одно поле ФИО или 3 поля: Ф, И, О или ты как-то по другому отсекаешь только фамилию.
Цитата(Ivushka @ 25.1.2006, 13:28 Найти цитируемый пост)

причем криво

Офигительно криво. Ну ладно
Цитата(Ivushka @ 25.1.2006, 13:28 Найти цитируемый пост)

"Олегович" и "О."

А если там будут три Петров Сидор ["Анатольевич", "Александрович", Алексеевич"] а в сокращенном просто "А", как будешь выбирать? По каким полям можно еще идентефицировать (ну например есть там дата рождения или нет - наврядли эти три Сидора в один день родились (отчества-то разные)). И Еще у тебя только с отчествами такие грабли или с именами тоже?
Цитата(Ivushka @ 25.1.2006, 13:28 Найти цитируемый пост)
к тому же нужно сделать так

А где условие выборки smile
Не сочти за прикол, но по разнице между начальными данными и конечными можно написать только так:
Код

Select id, фио
from table1
where фио='a' or фио='у'
order by фио, id

либо
Код

Select id, фио
from table1
where фио in ('a', 'у')
order by фио, id

Автор: Ivushka 25.1.2006, 14:03
Цитата(ТоляМБА @ 25.1.2006, 13:50 Найти цитируемый пост)
Так, подожди, у тебя одно поле ФИО или 3 поля: Ф, И, О

3 поля: фамилия, имя, отчество

Цитата(ТоляМБА @ 25.1.2006, 13:50 Найти цитируемый пост)
Офигительно криво.

я сама убила бы только они все далеко)

Цитата(ТоляМБА @ 25.1.2006, 13:50 Найти цитируемый пост)
А если там будут три Петров Сидор ["Анатольевич", "Александрович", Алексеевич"] а в сокращенном просто "А", как будешь выбирать? По каким полям можно еще идентефицировать (ну например есть там дата рождения или нет - наврядли эти три Сидора в один день родились (отчества-то разные)).

в том то и прикол!!! остальные поля не обязательные! и в основном пустые

Цитата(ТоляМБА @ 25.1.2006, 13:50 Найти цитируемый пост)
И Еще у тебя только с отчествами такие грабли или с именами тоже?

с именами тоже)))
асть еще такое при одинаковых ФИО

имя отчество
А.В. [пусто]
А. В.
Цитата(ТоляМБА @ 25.1.2006, 13:50 Найти цитируемый пост)
А где условие выборки

Выбрать строки с повторяющимися ФИО но разными ID

Автор: ТоляМБА 25.1.2006, 14:22
Цитата(Ivushka @ 25.1.2006, 14:03 Найти цитируемый пост)

Выбрать строки с повторяющимися ФИО но разными ID

Код

Select id, фио
from table1
group by фио, id
having count(фио)>1
order by фио, id

having count(фио)>1 - значит что запись встречается больше одного раза то есть повторяется
order by фио, id - эт не помню где ставить перед или после having, проверь сама плз.

А по первому вопросу даже и не знаю что ответить, если их нельзя четко различить то либо нанять киллера для юзеров или к гадалке идти (не сочти за издевательство)

Автор: Akina 25.1.2006, 14:29
Ivushka
Настоятельная рекомендация.

Письменно (слышишь - ПИСЬМЕННО) сообщить руководству, что на основе занесенных в БД данных задача НЕРЕШАЕМА. Для ее решения НЕОБХОДИМО потребовать от структуры, осуществляющей ввод данных, произвести выверку/корректировку БД, сверив содержащиеся там данные с данными на твердых носителях (в бумаге) и исправив информацию в БД в соответствии с теми требованиями, которые ты прилагаешь.
В приложении четко описАть заполнение каждого поля БД отдельно - регистры, пробелы, знаки препинания, порядок следования, используемые словари и т.п.

Эту бумагу надо довести до состояния, когда она превратится в приказ руководства на проведение данной работы, а ты по этому приказу - начальник, координатор, куратор, госприемка и раздаватель люлей.

Автор: Ivushka 25.1.2006, 14:33
Цитата(ТоляМБА @ 25.1.2006, 14:22 Найти цитируемый пост)
А по первому вопросу даже и не знаю что ответить

а надо именно оно(((

а этот запрос у меня уже написан
надо туда впишнуть типа того

Код

 Count(SirName) >1 and (Count(name[0])>1 and (Count(SecondName[0])>1 or IsNull(SecondName)) )

Под name[0] и SecondName[0] я подразумеваю 1-й символ поля (только как его найти????)
Добавлено @ 14:35
Akina я бы с удовольствием...
только мне как раз надо предоставить выборку максимально приемлемую на примере которой будет делаться то что ты предлогаеш

Автор: Ivushka 25.1.2006, 17:52
Сделала через 3 запроса и то не все нормально получилось

запрос 4
Код

SELECT Ref_VIP.Surname, First(Ref_VIP.Name) AS [First-Name], First(Ref_VIP.SecondName) AS [First-SecondName]
FROM Ref_VIP
GROUP BY Ref_VIP.Surname
HAVING (((Count(Ref_VIP.Surname))>1));


запрос 5
Код

SELECT Ref_VIP.Surname, First(Ref_VIP.Name) AS [First-Name1], First(Ref_VIP.SecondName) AS [First-SecondName1], Left([Ref_VIP].[Name],1) AS Выражение1, Left([Ref_VIP].[SecondName],1) AS Выражение2
FROM Запрос4 INNER JOIN Ref_VIP ON Запрос4.Surname = Ref_VIP.Surname
GROUP BY Ref_VIP.Surname, Left([Ref_VIP].[Name],1), Left([Ref_VIP].[SecondName],1)
HAVING (((Count(Left([Ref_VIP].[Name],1)))>1));


запрос 6
Код

SELECT Ref_VIP.*
FROM Запрос5 LEFT JOIN Ref_VIP ON Запрос5.Surname = Ref_VIP.Surname
WHERE (((Left([Ref_VIP].[Name],1))=[Запрос5]![Выражение1]) AND ((Left([Ref_VIP].[SecondName],1))=[Запрос5]![Выражение2] Or (Left([Ref_VIP].[SecondName],1))="" Or (Left([Ref_VIP].[SecondName],1))="-" Or (Left([Ref_VIP].[SecondName],1))="0"));


может можно было и поще но голова уже не варит

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)