|
40 / 40 / 6
Регистрация: 12.01.2016
Сообщений: 406
|
|
Запрос на сравнение данных двух полей11.05.2017, 16:19. Показов 12326. Ответов 18
Метки нет (Все метки)
Приветствую
Название темы немного коряво, но я что-то тупю, не могу сформировать запрос который при группировке данных выполняет два условия одновременно. Имеется поле "Название" и логическое поле "Правда". Нужно так сгруппировать данные этих полей чтобы если в поле Правда значение ДА то группировались только записи, у которых есть это значение в поле Правда, а записи где поле Правда имеет значение Нет не группировались. Но если в записи, где имеется такое-же поле Название но в поле Правда нет ни одного значения ДА, то записи этих полей все равно группировались. Иначе - группировка записей происходила независимо от значения в поле Правда, но если в этом поле значение Да, то записи со значением Нет не выводились. Может решение простое, но я что-то запутался. Индикатором какие именно записи сгруппировались может служить поле Счетчика.
0
|
|
| 11.05.2017, 16:19 | |
|
Ответы с готовыми решениями:
18
Сравнение значений полей двух таблиц баз данных: Подскажите новичку Сравнение полей и запрос Сравнение полей из двух таблиц |
|
26825 / 14505 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
|
||||||
| 11.05.2017, 16:34 | ||||||
|
Возможно неправильно понял. Попробуйте такой запрос, где первый блок юнион содержит наименования где Правда=True, а второй только те где ни у одного наименования нет True в поле Правда
1
|
||||||
|
40 / 40 / 6
Регистрация: 12.01.2016
Сообщений: 406
|
|
| 12.05.2017, 08:07 [ТС] | |
|
Да, все работает как нужно но в режиме конструктора это не сделать как я понял, так?
Просто в реале полей гораздо больше и писать это все на SQL мне сложновато, но в любом случае благодарю!
0
|
|
|
26825 / 14505 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
|
|
| 12.05.2017, 10:01 | |
Сообщение было отмечено sysghost как решение
Решение
sysghost, достаточно просто сделать как Вы хотите:
- в конструкторе создайте нужный запрос со всеми полями. В графе Правда задайте условие True (Истина) и дайте нужные группировки. - перейдите в режим SQL, удалите в конце выражения точку с запятой и скопируйте выражение - на новой строке напишите UNION ALL - перейдите на новую строку и вставьте из буфера скопированное. - удалите во втором блоке предложение Where целиком - в самом конце напишите в Having условие HAVING SUM(Правда)=0 Вот и все. Большая часть со всеми полями делается в конструкторе. Только чуть в скл.
1
|
|
|
40 / 40 / 6
Регистрация: 12.01.2016
Сообщений: 406
|
|
| 12.05.2017, 12:01 [ТС] | |
|
Благодарю за помощь и развернутый ответ.
0
|
|
|
40 / 40 / 6
Регистрация: 12.01.2016
Сообщений: 406
|
|
| 12.05.2017, 14:43 [ТС] | |
|
Да, как я и предполагал вылезут какие то грабли.
Вот например стоило изменить тип поля да-же в этом простом примере и уже не могу заставить его работать, вот два неудачных запроса, где косяк? Кроме того у меня в запросе директива не GROUP BY а ORDER BY. Нашел да-же описание этих запросов на объединение у мелкомягких - https://support.office.com/ru-... u-RU&ad=RU но и по их инструкции что то не срастается. Хоть пример оживите пожалуйста, может так хоть пойму механизм этого чудо запроса.
0
|
|
|
40 / 40 / 6
Регистрация: 12.01.2016
Сообщений: 406
|
|||||||||||
| 12.05.2017, 15:43 [ТС] | |||||||||||
|
Попробуем иначе, я изложу ход своих мыслей а Вы подскажете где у меня косяк в понимании.
Итак, имеем начальный запрос который выглядит так:
FROM - выбирает саму таблицу GROUP BY - производит группировку по полям Название и Правда HAVING - указывает условие этой группировки для поля Правда ORDER BY - сортирует данные поля Название -------------- Теперь нам нужно прикрепить к данным выбранным в первом запросе данные выбранные во втором. Для этого прикрепляем второй набор данных инструкцией UNION ALL Если мы повторим полный текст предыдущего запроса то получим дубль данных первого запроса, если только инструкция UNION то данные первого и второго запросов сгруппируются вместе и будут выглядеть как первый запрос. ------------- Если мы изменим условие группировки первого запроса на
------------- Ну и самое интересное, как удалить теперь из первого запроса строки у которых значения поля Название совпадают в обоих объединенных запросах но нужно оставить только те, у которых в поле Правда есть значение Да? Опять нужно провести HAVING но уже по объединенному результату?
0
|
|||||||||||
|
Модератор
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
|
|
| 12.05.2017, 15:48 | |
|
sysghost,
Вы используете HAVING не по назначению. HAVING - для агрегированных данных. В приведенном запросе достаточно WHERE.
0
|
|
|
40 / 40 / 6
Регистрация: 12.01.2016
Сообщений: 406
|
||
| 13.05.2017, 11:10 [ТС] | ||
|
Причем в другом варианте у меня было и WHERE, не понимаю как так получается, но то не мой выбор а конструктора access. Кроме того это простенький пример, в моем варианте полей больше и условий то-же. Мне бы саму задумку понять. Добавлено через 19 часов 2 минуты В общем воз и ныне там. Эта задача вобще решаема?
0
|
||
|
40 / 40 / 6
Регистрация: 12.01.2016
Сообщений: 406
|
|
| 13.05.2017, 12:25 [ТС] | |
|
В общем огородами таки удалось решить проблему, понадобилось аж три запроса, если можно проще, напишите пожалуйста.
0
|
|
|
Модератор
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
|
|||||||
| 13.05.2017, 16:50 | |||||||
|
Вот вариант:
1
|
|||||||
|
40 / 40 / 6
Регистрация: 12.01.2016
Сообщений: 406
|
|
| 15.05.2017, 08:11 [ТС] | |
|
0
|
|
|
40 / 40 / 6
Регистрация: 12.01.2016
Сообщений: 406
|
|
| 15.05.2017, 08:35 [ТС] | |
|
Вообще то преобразование к логическому типу поля не совсем подходящий вариант, если в поле предусмотрено только два значения, то годится, но их может быть и больше, хотелось бы более универсальный вариант.
Перекрестный запрос как раз и позволяет сгруппировать любое количество вариантов, конечно если таковые заранее предполагаются и вывести итоговое поле с нужной логикой отбора, например если отсутствуют оба базовых варианта ответа то выбрать третий или четвертый, кроме того можно и сгруппировать не только два но и любое количество вариантов. Но если Ваш пример для двух значений заработает, то для простых вариантов он конечно будет предпочтительнее. Добавлено через 11 минут Решение могло бы быть проще если бы я смог исключить из списка сгруппированных записей с значением Нет или как то еще, записи сгруппированные по значению Да (или как-то еще), но я не нашел условия исключающего список значений одного поля из списка другого, что то вроде Not Like ([Правда]).
0
|
|
|
26825 / 14505 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
|
||||||
| 15.05.2017, 09:14 | ||||||
|
Если считать, что Ваш запрос 1_П_Таблица1 правильный, то есть и другое решение
1
|
||||||
|
40 / 40 / 6
Регистрация: 12.01.2016
Сообщений: 406
|
||
| 15.05.2017, 12:38 [ТС] | ||
|
0
|
||
|
Модератор
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
|
||||||||||||
| 15.05.2017, 13:44 | ||||||||||||
|
Нужна конкретика - что происходит, как, ... - со всеми подробностями. Во-вторых, в таблице нет поля B. Естественно, для выполнения запроса это поле следовало создать и проставить галочки в записях, где Правда="Да". На это все меньше двух минут нужно. Ну хорошо. Вот аналогичный запрос не с полем B, а с полем Правда.
Вижу, в поле Правда теперь еще и третье значение есть (приводить его не буду). Тогда запрос уточняется:
1
|
||||||||||||
|
40 / 40 / 6
Регистрация: 12.01.2016
Сообщений: 406
|
||
| 16.05.2017, 08:08 [ТС] | ||
|
Более подробно я описал в посте ниже того ответа, я его дополнял но в один пост дополнение увы не склеилось автоматически. --------- Опять не всё гладко. Если Вы обратите внимание на результаты запросов "РезультатВаш" и "РезультатМой" то можно заметить что хоть соответствие полей "Название" и "Да/Нет" совпадают, в полях счетчика и Мах-Число не сходятся, проверить что верно можно по Таблице 1. Но за помощь благодарю, просто сейчас нет времени на анализ проблемы, занимаюсь параллельно другой работой. Пример в приложении.
0
|
||
|
Модератор
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
|
|
| 16.05.2017, 10:52 | |
|
sysghost,
Разумеется, я видела расхождение в определении минимального кода группы. Само собой. Но считаю, что мои результаты соответствует условиям, изложенным в стартовом посте, а Ваши результаты - нет. У Вас в группу попадают записи с полем Правда="Нет", при том, что для этих Названий есть записи с полем Правда="Да". То есть, записи с "Нет" для этих Названий должны, согласно условию, исключаться из рассмотрения. Для Оранжевого и Голубого, кажется. Могу ошибиться - пишу с планшета, базу Вашу не смотрю. И занимаюсь параллельно своей собственной работой.
0
|
|
|
40 / 40 / 6
Регистрация: 12.01.2016
Сообщений: 406
|
||
| 16.05.2017, 11:59 [ТС] | ||
|
В группу Да попадают только 4 цвета - Красный, Оранжевый, Желтый, Зеленый. Это условий соблюдается в обоих вариантах, а вот другие поля привязываются по разному. Я Вам благодарен за помощь и понимаю что Вам возможно не до этого, как сейчас и мне, пишу вот в обеденный перерыв, возможно Ваш вариант после небольшой доработки вполне подойдет, просто обратил внимание на этот момент и все, еще раз благодарю за помощь.
0
|
||
| 16.05.2017, 11:59 | |
|
Помогаю со студенческими работами здесь
19
Сравнение двух полей на схожесть значений
Сравнение двух полей в разных классах сравнение значений полей двух объектов структуры Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 31.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|