0 / 0 / 0
Регистрация: 18.11.2017
Сообщений: 16
|
|||||||||||
1 | |||||||||||
Вывод дубликатов с последующим удалением из загружаемой таблицы SQL запросом05.05.2019, 14:54. Показов 3739. Ответов 16
Уважаемые Гуру, прошу Вашей помощи, уже неделю пытаюсь решить проблему.
По форуму странствовал и подобия не нашёл, может и плохо искал в течении дня. Суть 2 ой части создаваемой программы, Загрузка выбранной базы из excel в ms access: 1. В отдельную таблицу без повторов. 2. В основную таблицу без повторов. 3. Вывести повторы в отчёт. Таблица основная - можно с индексом, на данный момент без индекса, так как предположил что из -за них после соединения таблиц (UNION) не удалялись дубликаты. Состоит из всех столбцов, которые имеются в безобразном порядке загружаемых баз из excel. Зачастую столбцы могут отсутствовать в загружаемых базах, НО столбцы которые сравниваются, присутствуют всегда. Отчёт - построен и отредактирован, необходимо допилить запрос (скорее переписать). код VBA - дает выбрать загружаемую базу пользователю, изменяет источник запроса у отчёта, выводит отчёт. Network_report - отчёт, настроенный на вывод, взаимодействующий с кодом VBA ниже. Network_acc - основная база. Load_base - переменная и в данный момент загружаемая таблица, состоит в коде VBA ниже под названием 'name_table'. strSQL - пока не удавшийся sql запрос (который и нужен). Кликните здесь для просмотра всего текста
Условие, загружаемая база сверяется с основной: 1. Если "Устройства" равны в двух таблицах И "имена" отличаются ТОГДА удалить из добавления к основной таблице, удалить из загружаемой таблицы, добавить к выводу в отчёт. 2. Если "Устройства" равны в двух таблицах И "Частота, МГц" отличаются ТОГДА удалить из добавления к основной таблице, удалить из загружаемой таблицы, добавить к выводу в отчёт. 3. Если "Устройства" из второй таблицы НЕТ в основной - тогда добавить строку. Мои крайние попытки объединить таблицы, и вывести по условиям ниже. Кликните здесь для просмотра всего текста
Надеюсь всё правильно и понятно оформил. Если нужно, то база во вложении, с примером загружаемой базы. Не по теме:
Кликните здесь для просмотра всего текста
SQL еще только учу, прошу не сильно ругать.... А access и тот особенным показался, надеюсь осилю его, поэтому очень прошу коментировать код, и очень нужна логика кода, так как для меня она не понятна, в отличии от других языков, к примеру python
0
|
05.05.2019, 14:54 | |
Ответы с готовыми решениями:
16
Перемещение строк из одной таблицы в другую, с последующим удалением из исходной Сортировка цифр в одной ячейки с последующим удалением дубликатов Поиск дубликатов в двух массивах с последующим удалением их из виртуального массива EF/SQL выбор таблицы в combobox и загрузка в datagrid с последующим редактированием |
7448 / 4582 / 302
Регистрация: 12.08.2011
Сообщений: 14,305
|
|
06.05.2019, 09:29 | 2 |
Вставлю свои пять копеек.
Когда я переводил своих пользователей с Эксёль на Акцесс, я делал так: 1) Вкратце узнавал сколько будет человек работать на первом этапе в программе, что она будет делать, что в ней основное (заявки, договора, контейнеры, автомобили, счета, номера и т.д.) 2) Брал портянку Эксель и на ней отмечал сферу ответственности каждого пользователя, а также столбцы, необходимые для работы каждого пользователя, что он там заполняет и что должен видеть, но не мочь редактировать. 3) На основе полученных данных и двух этих пунктов создавал таблицы, связи и структуру БД. 4) Кидал пяток записей по таблицам для теста. 5) Создавал формы для заполнения справочников и формы для непосредственного ввода фактических данных. 6) Тэстил эти формы. 7) Приводил всё к потребному виду, создавал логирование и заставку с меню и т.д. 8) Останавливал работу пользователей, обычно в пятницу вечером и\или в выходные Заливал данные из портянок в Акцесс. 9) Создавал первичную отчётность и выгрузку в Эксель\Ворд. 10) Удалял и блокировал все портянки и у всех 11) Устанавливал каждому сотруднику программу и обучал каждого сотрудника На этом этапе начинал по порядку ввода данных. Кто раньше вводит, тот и первый запускается. 12) Первая неделя самая сложная - тут безвылазно, но зависит от количества рабочих мест. Например большая разработка вводилась по отделам по 3-7 человек, что позволяло другим не прерывать рабочий процесс. 13) Собственно всё, точка, больше никакого Экселя для ввода данных.
1
|
0 / 0 / 0
Регистрация: 18.11.2017
Сообщений: 16
|
|
06.05.2019, 11:28 [ТС] | 3 |
Уважаемый alvk, доброго времени суток.
С Вами полностью согласен, да этапы эти надо пройти, но проблема из других источников, которые поступают к Нам. Поэтому решение "костыль" написал код на vba, чтобы перед заливкой оставил все нужные столбцы, и лишних не было. Возратимся к нашим "барашкам": я понимаю что написал много информации, и считаю нужным немного сократить, задача состоит в следующем, написать на SQL запрос для ms access: 1. Выбрать две таблицы, выбрать все столбцы по таблице Б. 2. Если Б.Устройство = А.Устройство И Б.Имя <> А.Имя ИЛИ _ --- Б.Устройство = А.Устройство И Б.Частота <> А.Частота ИЛИ _ --- Б.Устройство <> А.Устройство Тогда вывести в отчёт эту строку. Надеюсь на помощь, и что после смогу сам дописать запрос. Не по теме: Основная программа для ввода уже готова, с загрузкой без сравнения, так же с выбором по данным в базах при помощи запроса и нажатия кнопочки. Жалею что не с него начал работу с данными, много времени сэкономил бы.
0
|
7448 / 4582 / 302
Регистрация: 12.08.2011
Сообщений: 14,305
|
|
06.05.2019, 22:20 | 4 |
Если вы не можете повлиять на эти источники, то проще бросить эту затею прямо сейчас.
Если можете, то подготовьте им шаблон для ввода данных и разошлите каждому. Соответственно и загрузку делайте по этому шаблону.
0
|
0 / 0 / 0
Регистрация: 18.11.2017
Сообщений: 16
|
|
06.05.2019, 22:35 [ТС] | 5 |
Почему бросить эту затею, хотя бы из интереса и опыта думаю стоит добиться результата. Если мог повлиять - давно бы это сделал, но есть политики компаний и ТП. В таком случае вообще бы запретить вести БД в excel всем =) было бы идеально.
Хотите сказать, что такой запрос нереально выполнить ? На сколько я НЕ могу ошибаться, логика здесь не слишком сложна: вывести по условию разные данные двух таблиц в access/ Не по теме: Мне самому "нереально выполнить" на мгновение показалось.... Пока взял в руки учебник по SQL и заново начал повторять основу... :popcorn:
0
|
7448 / 4582 / 302
Регистрация: 12.08.2011
Сообщений: 14,305
|
|
08.05.2019, 02:10 | 6 |
у вас ввод как попало, поля\столбцы в разной последовательности и с разными названиями и с разным заполнением. Что вы собрались пробовать?
0
|
0 / 0 / 0
Регистрация: 18.11.2017
Сообщений: 16
|
||||||
08.05.2019, 17:40 [ТС] | 7 | |||||
Уважаемый, с наступающими праздниками.
Есть константы "столбцы", верно ? получается есть с чем сравнивать, разве не так? Окей, даже если я переведу в другой формат эти чудесные файлы екселя, либо напишу макрос, то если есть возможность выполнить sql запрос по моим условиям, прошу подсказать. Есть способ более длинный, но по sql проще - создать 4 таблицы (по 4 ём форматам данных), и использовать 4 ре разных запроса, получиться ? и будет что то типа
Объясню немного - не прошу о помощи при первой и второй и ....десятой стене, а прошу на тысячной стене, которая уже мне не поддается, так как формирую только базовые запросы, сфера немного основная другая....
0
|
26818 / 14497 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
|
||||||
08.05.2019, 17:51 | 8 | |||||
Весь топик не читал
Попробуйте такой запрос.
0
|
0 / 0 / 0
Регистрация: 18.11.2017
Сообщений: 16
|
||||||
08.05.2019, 18:47 [ТС] | 9 | |||||
Не помогло, благодарю за попытку. Запрос чуть поправил по оригинальным записям, не по наброскам сверху по памяти...
Уважаемые Гуру, объясните хотя бы почему так происходит, окей, если столбцы переформатировать в единый формат, то это из за разницы в данных, из-за пустых значений в "Имя", верно я понимаю ?
0
|
7448 / 4582 / 302
Регистрация: 12.08.2011
Сообщений: 14,305
|
|
09.05.2019, 00:50 | 10 |
С какого перепугу? С ваших слов констант у вас нет. На ввод в эксель вы не влияете и это дело пользователя и название столбца и его расположение по порядку и вообще его существование.
зачем? из Акцесс можно прямым запросом вытянуть данные из Эксель Добавлено через 1 минуту значит вы нас обманули с названиями ваших полей, это же вы запрос выложили с этими именами.
0
|
0 / 0 / 0
Регистрация: 18.11.2017
Сообщений: 16
|
|
09.05.2019, 01:11 [ТС] | 11 |
Обман - в предпоследнем сообщениия с телефона писал на память sql, ошибся и потом поправил, но проблемы не изменяет.
прямой запрос - дак если знаете, подскажите пожалуйста, я писал, что очень редко прошу помощи, в основном другим помогаю, но ответ на свой вопрос- до сих пор для меня загадка ( Перепуг - уважаемый alvk, прочитайте внимательно топ темы, там написано ' но сравниваемые столбцы не меняются', это и означает константа. Если это невозможно, так и напишите прямо, либо помогите. благодарю за ваш ответ и надеюсь на помощь.
0
|
7448 / 4582 / 302
Регистрация: 12.08.2011
Сообщений: 14,305
|
|
09.05.2019, 01:25 | 12 |
Я вам задал вопрос - вы на него ответили, а сейчас пишете, что "сравниваемые столбцы не меняются", будем считать что так и есть, ладно. В чём конкретно у вас вопрос на данный момент?
В ваших таблицах нет полей с датами и нет ключей. Вы данные на 1 день сравниваете, а потом удаляете? Или как? p.s. в Экселе по первым 5 строкам определяется формат столбца, емнип. Лучше там жёстко прописывать текст или число, а не общий.
0
|
0 / 0 / 0
Регистрация: 18.11.2017
Сообщений: 16
|
|
09.05.2019, 02:03 [ТС] | 13 |
Я и писал 'есть константы' ответ на ваш вопрос 'что вы собрались сравнивать'.
ключи - написано в Топ темы ''Таблица основная - можно с индексом, на данный момент без индекса'', исходя из поговорки 'относись к людям так же, как хотел бы чтобы они относились к тебе' можно предположить, что с индексом лучше, но если с ним не получится, то можно и без. Вопрос остаётся прежним: Загрузить в акцесс данные с условием : 1. В отдельную таблицу без повторов. 2. В основную таблицу без повторов. 3. Вывести повторы в отчёт. Повторы это те строки, у которых равны данные - 'устройство', имя, частота.
0
|
7448 / 4582 / 302
Регистрация: 12.08.2011
Сообщений: 14,305
|
|
09.05.2019, 04:15 | 14 |
при чём тут индексы? ответьте на вопрос -->
Без этого невозможно ничего. Завтра вы загружать планируете? А послезавтра?
0
|
0 / 0 / 0
Регистрация: 18.11.2017
Сообщений: 16
|
|
09.05.2019, 09:39 [ТС] | 15 |
Ключи и индексы - при сотом практическом подзапросе, при команде join мне показалось что индекс каким то образом мог влиять на присоединение таблиц, так как выводилось две таблицы рядом.... Как то так (=
выгружать - планирую, Вы хотите указать на то что база не будет копиться? Дак я знаю про это, уважаемый, у меня не мало опыта аналитики, как и у Вас скорее всего, я сюда не просто поболтать пришёл, не спорю что в прошлом сообщении я мог написать что то не верно. Поэтому в топе и писал, что очень прошу комментарии к коду, так как логики sql до конца понять ещё не смог, чтобы писать подзапросы более сложные, чем с одним вложением. Окей, допустим я прицеплю текущую дату выгрузки таблиц перед загрузкой в основную, к примеру она есть, что это изменит.... На мой взгляд исходя из условия, я только наглядно увижу дату совпадения данных И есть ещё условие с этим связаное - вывести в отчёт по условию network_acc.устройство =load_base.устройство И network_acc.имя<>load_base.имя или network_acc.частота <> load_base.частота - если они идентичны, то мне любая помощь (с первым или со вторым) будет во благо и учение (=
0
|
7448 / 4582 / 302
Регистрация: 12.08.2011
Сообщений: 14,305
|
||||||
09.05.2019, 14:21 | 16 | |||||
Сообщение было отмечено rewen как решение
Решение
Индекс и ключ - это абсолютно разные вещи, определитесь уже что пишете.
Я не хочу ничего сказать, я вас спрашиваю. Вы знаете многое про свою БД, но я то нет. Ну хотя бы позволит не удалять последующие "повторения". Если правильно связать в запросе, то условие не понадобится Например, есть у вас определённый справочник, а вам нужно туда добавить недостающие имена из таблицы "новое", то вывести вы их можете:
0
|
0 / 0 / 0
Регистрация: 18.11.2017
Сообщений: 16
|
|
25.05.2019, 00:15 [ТС] | 17 |
Уважаемые, так и не добился ответа тут, что не так я делал, но решил проблему костылем на vba, который выгружает из бд таблицу, сравнивает её в екселе с выбранной таблицей пользователем и загружает обратно. Будь вы у меня в теме, где вы были бы новичками, думаю я бы бесспорно подсказал, что нужно ключевые поля и индексируемые, значит будем считать что я неправильно (3раза) поставил вопрос (в трех аналогичных ситуациях).
код на vba сделал по типу - If a=a then If not b = b then If not c =c then С циклом for each по имеющимся значениям, надеюсь кого либо натолкнет его на мысль костыля, если здесь Спасибо..... С уважением ByRew.
0
|
25.05.2019, 00:15 | |
25.05.2019, 00:15 | |
Помогаю со студенческими работами здесь
17
Подстановка с 3-х листов на 4-ый с удалением дубликатов Подстановка с 2-х листов на 3-ий с удалением дубликатов Копирование файлов с последующим удалением Создание элементов списка с последующим их удалением Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Как сделать перенос строки в Bash
bytestream 28.01.2025
При работе с командной оболочкой Bash разработчики часто сталкиваются с необходимостью форматирования текстового вывода, где ключевую роль играет правильное управление переносами строк. Умение. . .
|
Поиск подстроки в строке с помощью Bash
bytestream 28.01.2025
Поиск подстроки в строке является одной из важных задач в программировании и обработке текстов. Применение такого поиска можно найти в самых разных областях, от анализа данных до разработки. . .
|
[golang] 169. Majority Element
alhaos 28.01.2025
Тут надо вернуть "мажористый" элемент который встречается в слайсе больше чем в половине случаев. По условиям задачи во входных данных такой элемент обязан присутствовать.
/ / . . .
|
Когда лучше использовать LinkedList вместо ArrayList в Java
bytestream 28.01.2025
При разработке Java-приложений выбор правильной структуры данных играет ключевую роль в обеспечении эффективности и производительности программы. ArrayList и LinkedList являются двумя. . .
|
Какой ответ HTTP лучше использовать: 403 Forbidden или 401 Unauthorized, когда недостаточно прав
bytestream 28.01.2025
В современной веб-разработке правильная обработка ошибок и точное информирование клиентов о статусе их запросов играют критическую роль в создании надежных и безопасных приложений. Особое внимание. . .
|
Как получить список всех файлов коммита в Git
bytestream 28.01.2025
Система контроля версий Git представляет собой мощный инструмент для управления изменениями в программном коде и других файлах проекта. В основе работы Git лежит концепция коммитов - снимков. . .
|
Как записать только часть изменений файла в Git
bytestream 28.01.2025
В процессе разработки программного обеспечения часто возникает необходимость сохранить только определенные изменения из множества внесенных правок в файлах. Система контроля версий Git предоставляет. . .
|
[golang] 80. Remove Duplicates from Sorted Array II
alhaos 28.01.2025
В предоставленном упорядоченном по возрастанию целочисленном слайсе, оставить уникальные элементы полюс один возможный дубликат. Вернуть количество таких элементов.
/ / . . .
|
Что такое внедрение зависимостей и для чего оно применяется
bytestream 27.01.2025
В современной разработке программного обеспечения одной из ключевых проблем является управление зависимостями между различными компонентами системы. Внедрение зависимостей (Dependency Injection, DI). . .
|
Как установить cellpadding и cellspacing в CSS
bytestream 27.01.2025
При создании веб-страниц с табличными данными разработчики часто сталкиваются с необходимостью правильного оформления внутренних и внешних отступов в таблицах. В традиционной разметке HTML для этих. . .
|
Чем отличаются public, protected, package-private и private в Java
bytestream 27.01.2025
В языке программирования Java механизм модификаторов доступа играет ключевую роль в реализации одного из фундаментальных принципов объектно-ориентированного программирования - инкапсуляции. . . .
|
Зачем нужно explicit в C++. Преобразование типов
bytestream 27.01.2025
В мире программирования на C++ управление преобразованием типов данных играет crucial роль в создании надежного и безопасного кода. Язык C++ предоставляет множество механизмов для контроля над. . .
|