Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 19.06.2012
Сообщений: 4

Выборка двойников - дополнительное условие

27.06.2012, 19:09. Показов 2461. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть таблица с личными данными с полями:
Kod_l - семизначное число, первые три цифры - код участка, далее личный номер
Fam - фамилия
Im - первая буква имени
Ot - первая буква отчества
Pol - 1 - муж., 2 - жен.
Data_r - дата рождения
...
Этап 1. Выбрать двойников. Решается запросом:
SQL
1
2
3
4
SELECT DISTINCTROW PASPORT.Kod_l, PASPORT.Fam, PASPORT.Im, PASPORT.Ot, PASPORT.Pol, PASPORT.Data_r, PASPORT.Street, PASPORT.Dom, PASPORT.Korp, PASPORT.Kvart
FROM PASPORT
WHERE (((PASPORT.Fam) IN (SELECT [Fam] FROM [Pasport] AS Tmp GROUP BY [Fam],[Im],[Ot],[Pol],YEAR([Data_r]) HAVING COUNT(*)>1  AND [Im] = [Pasport].[Im] AND [Ot] = [Pasport].[Ot] AND [Pol] = [Pasport].[Pol] AND YEAR([Data_r]) = YEAR([Pasport].[Data_r]))))
ORDER BY PASPORT.Fam, PASPORT.Im, PASPORT.Ot, PASPORT.Data_r;
Этап 2. Из списка двойников убрать пары, где один код - 614****, второй - в диапазоне 601****-604****.
Как это можно сделать?
Вложения
Тип файла: rar polic_test.rar (11.7 Кб, 20 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.06.2012, 19:09
Ответы с готовыми решениями:

Отлов двойников
Доброго времени суток! Братья по Access'у! Просветите меня в таком вопросе: Есть организация с филиалами, в каждом филиале -...

Дополнительное условие
Добрый день, Требуется помощь уважаемого сообщества знатаков cmd. Суть скрипта в следующем - Вывести результат работы программы...

Как задать дополнительное условие?
Задание само: Дан файл, содержащий текст. Переписать в другой файл только слова, начинающиеся с согласной, а заканчивающиеся гласной ...

7
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,380
28.06.2012, 02:46
Этап 1 упростил.
Этап 2 см. --->
T-SQL
1
2
3
4
5
SELECT двойники.Kod_l, IIf(Left([двойники].[Kod_l],3) In (614,601,602,603,604),1,0) AS marka,
 двойники.Klient, двойники.Pol, двойники.Data_r, двойники.Street, двойники.Dom, двойники.Korp,
 двойники.Kvart
FROM двойники
WHERE (((IIf(Left([двойники].[Kod_l],3) In (614,601,602,603,604),1,0))=0));
Вложения
Тип файла: rar polic_test.rar (12.0 Кб, 17 просмотров)
0
0 / 0 / 0
Регистрация: 19.06.2012
Сообщений: 4
30.06.2012, 10:08  [ТС]
Сожалею, но это не то.
Ваш запрос убирает все записи с кодом, начинающимся на 601-604, 614. Мне нужно убрать пары записей, где в одной записи код начинается на 614, второй - на 601...604. В приложении в таблице "нужный результат" я показал, чего надо добиться с помощью запроса.
Вложения
Тип файла: rar polic_test1.rar (12.2 Кб, 9 просмотров)
0
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
30.06.2012, 12:47
Цитата Сообщение от alexarj Посмотреть сообщение
нужно убрать пары записей, где в одной записи код начинается на 614, второй - на 601...604. В приложении в таблице "нужный результат" я показал, чего надо добиться с помощью запроса.
Непонятно. Вот результат работы вашего запроса "двойники"

Kod_lFamImOtPolData_rStreetDomKorpKvart
6041524ИмсчяОА201.01.1979Шевченко109 2
6990074ИмсчяОА215.10.1979Рокоссовског37а41
6070244ЙцукенЛВ204.04.1973Седневская3  
6020499ЙцукенЛВ204.04.1973Седневская3  
6061670ФывапВИ101.01.19481 Мая167А96
6141005ФывапВИ123.09.19481 Мая167а96
6060001ЯчсмиТН217.05.19761 Мая16911
6022304ЯчсмиТН217.09.19761 Мая16911

Судя по таблице "Нужный результат"

Kod_lFamImOtPolData_rStreetDomKorpKvart
6990074ИмсчяОА215.10.1979Рокоссовског37а41
6041524ИмсчяОА201.01.1979Шевченко109 2
6070244ЙцукенЛВ204.04.1973Седневская3  
6020499ЙцукенЛВ204.04.1973Седневская3  
6060001ЯчсмиТН217.05.19761 Мая16911
6022304ЯчсмиТН217.09.19761 Мая16911

у вас убрана пара записей с Fam равными Фывап. Kod_l одной из убранных записей действительно, как вы и хочете, начинается с 614, но Kod_l второй то начинается с 606, которое никак не входит в промежуток 601-604. Предполагаю, что правый конец интервала ошибочен, нужно 606.
Исходя из этого предположения и из того, что "Kod_l - семизначное число, первые три цифры - код участка" (Cod_uch), требуемый запрос
SQL
1
2
3
4
5
6
7
8
9
SELECT Pasport.*
FROM Pasport
WHERE EXISTS (SELECT 1 FROM Pasport AS Tmp 
              WHERE Fam=Pasport.Fam AND Im = Pasport.Im AND Ot = Pasport.Ot AND 
                    Pol = Pasport.Pol AND YEAR(Data_r) = YEAR(Pasport.Data_r) AND 
                    Kod_l<>Pasport.Kod_l AND 
                    NOT ((Cod_uch = 614 AND (Pasport.Cod_uch BETWEEN 601 AND 606)) OR 
                        ((Cod_uch BETWEEN 601 AND 606) AND Pasport.Cod_uch = 614)))
ORDER BY Fam, Im, Ot, Data_r
Двойники же, если это необходимо, находятся таким запросом (аналог вашего запроса "двойники")
SQL
1
2
3
4
5
6
7
SELECT Pasport.*
FROM Pasport
WHERE EXISTS (SELECT 1 FROM Pasport AS Tmp 
              WHERE Fam=Pasport.Fam AND Im = Pasport.Im AND Ot = Pasport.Ot AND 
                    Pol = Pasport.Pol AND YEAR(Data_r) = YEAR(Pasport.Data_r) AND 
                    Kod_l<>Pasport.Kod_l)
ORDER BY Fam, Im, Ot, Data_r
0
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,380
30.06.2012, 13:41
Цитата Сообщение от minob Посмотреть сообщение
Kod_l одной из убранных записей действительно, как вы и хочете, начинается с 614, но Kod_l второй то начинается с 606
Ужас!
to ТС: Нам что в угадайку играть?
0
0 / 0 / 0
Регистрация: 19.06.2012
Сообщений: 4
04.07.2012, 10:31  [ТС]
Предполагаю, что правый конец интервала ошибочен, нужно 606.
Вы правы. Прошу прощения за несоответствие. Между первым и вторым моими постами мне "уточнили" входные условия, отсюда нестыковка.
... из того, что "Kod_l - семизначное число, первые три цифры - код участка" (Cod_uch)...
Это не так. При выдаче кода первые три цифры кода и номер участка совпадают, но в дальнейшем человек может сменить участок, а код сохраняется.
Предложенный вами запрос очень сильно загружает машину . При обработке тестовой таблицы (менее 2000 записей) загрузка памяти 50%, ввод/вывод близок к 100% по чтению, работа с другими приложениями невозможна. В результате через полчаса вынужден был прервать выполнение запроса. Это нормально?
0
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
04.07.2012, 14:16
Цитата Сообщение от alexarj Посмотреть сообщение
Это не так. При выдаче кода первые три цифры кода и номер участка совпадают, но в дальнейшем человек может сменить участок, а код сохраняется.
Я привел цитату: "Kod_l - семизначное число, первые три цифры - код участка" из вашего сообщения.
Цитата Сообщение от alexarj Посмотреть сообщение
Это нормально?
Во многих случаях запрос, имеющий коррелирующий подзапрос, выполняется тяжеловато.
Пробуйте такой вариант
SQL
1
2
3
4
5
6
7
SELECT DISTINCT P1.*
FROM Pasport AS P1 INNER JOIN Pasport AS P2 ON P1.Fam=P2.Fam AND P1.Im = P2.Im AND P1.Ot = P2.Ot AND 
                    P1.Pol = P2.Pol AND YEAR(P1.Data_r) = YEAR(P2.Data_r) AND 
                    P1.Kod_l<>P2.Kod_l AND 
                    NOT ((LEFT(P1.Kod_l,3) = "614" AND (LEFT(P2.Kod_l,3) BETWEEN "601" AND "606")) OR 
                        ((LEFT(P1.Kod_l,3) BETWEEN "601" AND "606") AND LEFT(P2.Kod_l,3) = "614"))
ORDER BY P1.Fam, P1.Im, P1.Ot, P1.Data_r
Смените тип поля Kod_l на текстовый или длинное целое.
0
0 / 0 / 0
Регистрация: 19.06.2012
Сообщений: 4
05.07.2012, 14:50  [ТС]
Пробуйте такой вариант
Поекрасно работает. Очень признателен Вам за помощь.
Смените тип поля Kod_l на текстовый или длинное целое.
В рабочей базе PASPORT - связанная таблица Paradox (DOS), изменение свойств невозсможно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.07.2012, 14:50
Помогаю со студенческими работами здесь

Файлы-матрицы си. +Дополнительное условие
Ребят, помогите, пожалуйста, с задачей. Нужно создать файл, компонентами которого являются целые числа, первым элементом является...

SQL запрос между 2 датами + к нему дополнительное условие
Приветствую всех! У меня возникла одна проблема. Как добавить ещё условие для поиска по какому-нибудь полю в таблице. С датами по...

Отлов двойников
Доброго времени суток! Задавал вопрос в форуме по Access'у, но не получил ответа:-(. Может здесь кто знает! Просветите меня в таком...

Выборка из массива меньших массивов и условие пересечения оных
1. Рандомно создаю массив A. 2. проверяю, если в нем есть массив P из четных чисел. 3. проверяю, есть ли также массив Q из...

Отобрать двойников в одном столбце
Подскажите пожалуйста!!! Есть столбец из 8000 строк в нем попадаются одинаковые значения, Необходимо сделать так что бы значения строк...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru