|
|
|
Forum Guru
      
участник
Last Login: 17.07.2008 15:32
Сообщ.: 51,
Visits: 403
|
|
| Доброго времени суток! Задавал вопрос в форуме по Access'у, но не получил ответа:-(. Может здесь кто знает! Просветите меня в таком вопросе: Есть организация с филиалами, в каждом филиале - подразделения, в каждом подразделении - отделы. Задача-максимум: показать для каждого отдела записи с дубликатами (в других отделах, подразделениях, филиалах). Типа показать все записи для ИВАНОВ ИВАН ИВАНОВИЧ, который может быть зафиксирован в разных отделах. В конструкторе запросов есть мастер ПОВТОРЯЮЩИЕСЯ ЗАПИСИ, но он работает для всей организации. Если я его модифицирую (вставляю условие отбора) хотя бы для филиала, то он выдает записи-дубликаты только для филиала, а из других филиалов записи не показываются. Т.е. вижу, что дубликаты есть (т.к. запись из данного филиала туда попадает), но не вижу - где :-(. Сейчас использую brute force - влобовую в цикле иду по отделу и для каждого запросом ищу двойников, если нахожу, сбрасываю во временную таблицу. Но спинным мозгом чую, что должно быть что-то такое белое, воздушное, легкое ((с) йогурт:-). Помогите кто чем... С уваженим, Анатолий
|
|
|
|
|
Supreme Being
      
модератор
Last Login: 29.10.2007 14:45
Сообщ.: 1 833,
Visits: 16 863
|
|
| Запутано написано. Приведите структуру таблиц(ы). Полагаю, скорее всего в данном случае подойдет группировка со сравнением Count(fld) с Count(DISTINCT fld), но для точного ответа - приведите скрипт создания таблиц(ы) и пример нескольких строк.
|
|
|
|
|
Supreme Being
      
администратор
Last Login: 13.11.2007 13:41
Сообщ.: 4 421,
Visits: 49 251
|
|
select * from table t1 where id not in ( select min(t2.id) from table t2 where and t2.field1=t1.field1 group by t2.field1)
|
|
|
|
|
Forum Guru
      
участник
Last Login: 17.07.2008 15:32
Сообщ.: 51,
Visits: 403
|
|
| Доброго времени суток! Попробую на примерах :-). Есть три таблицы - Ab, Direct, Fac. Ab - таблица личных данных, она связана по полю DirectID с таблицей отделов Direct. Таблица Direct связана по полю FacID с таблицей подразделений Fac. Есть ещё таблица филиалов HS, таблица Fac связана с ней по полю HSID. Я хочу увидеть людей, которые зафиксированы в разных отделах\подразделениях\филиалах (имеется более одной записи с совпадающими фамилией, именем и отчеством). Построитель создает такой запрос : SELECT Ab.LastName, Ab.FirstName, Ab.MidName, Ab.DirectID FROM Ab WHERE (((Ab.LastName) In (SELECT [LastName] FROM [Ab] As Tmp GROUP BY [LastName],[FirstName],[MidName] HAVING Count(*)>1 And [FirstName] = [Ab].[FirstName] And [MidName] = [Ab].[MidName]))) ORDER BY Ab.LastName, Ab.FirstName, Ab.MidName; Этот запрос показывает все дубликаты во всех филиалах. Но мне нужно, например, увидеть записи, находящиеся в одном филиале (например, с HSID=1), и где уних двойники. (Т.е. если есть дубликаты в филиале 2, которых нет в филиале 1, я их не хочу видеть). Модифицирую запрос : SELECT DISTINCTROW Ab.LastName, Ab.FirstName, Ab.MidName, Ab.DirectID, Fac.SmallName FROM (Fac INNER JOIN Direct ON Fac.FacID = Direct.FacID) INNER JOIN Ab ON Direct.DirectID = Ab.DirectID WHERE (((Ab.LastName) In (SELECT [LastName] FROM [Ab] As Tmp GROUP BY [LastName],[FirstName] HAVING Count(*)>1 And [FirstName] = [Ab].[FirstName] )) AND ((Fac.HSID)=1)) ORDER BY Ab.LastName, Ab.FirstName; Но при этом я вижу дубликаты, находящиеся только в филиале 1. Если у записи в филиале 1 есть дубликат в филиале 2, то запись из филиала 2 не показывается (только из филиала 1) :-( Таким образом, я вижу, что дубликат есть, но не вижу, где :-( . Поэтому и прошу подсказать, может есть более изящное решение :-) С уважением, Анатолий
|
|
|
|
|
Supreme Being
      
участник
Last Login: 12.10.2007 4:11
Сообщ.: 219,
Visits: 1 804
|
|
| Попробцй так SELECT a1.LastName, a1.FirstName, a1.MidName, a1.DirectID FROM Ab a1, ( select count(*), a2.DirectID from Ab a2 group by a2.DirectID having count(*)>1 ) a3 where a1.DirectID=a3.DirectID Вроде как должно работать, го проверить мне не на чем
|
|
|
|