Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2019, 20:39   #1
yorri
Пользователь
 
Регистрация: 17.04.2015
Сообщений: 27
По умолчанию Помогите составить SQL (ADO, Access) запрос

Есть таблица.


Нужно выбрать place,name,color,price у которых цена разная. name, color - совпадают, place - как бы не берется во внимание.

Должно показать то, что отмечено зеленым.


Спасибо.

Последний раз редактировалось yorri; 14.03.2019 в 21:34.
yorri вне форума Ответить с цитированием
Старый 14.03.2019, 21:19   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Сгруппировать по name, color, price. Результат сгруппировать по name, color и посчитать количество записей. И выдать из основной таблицы те, у которых это количество больше 1. Это все в одном запросе используя вложенность. В acces еще есть dcount для подсчета количества различных, но как с ним ado не в курсе
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.03.2019, 21:36   #3
yorri
Пользователь
 
Регистрация: 17.04.2015
Сообщений: 27
По умолчанию

/картинки перегрузил, была ошибка. извините/
Код:
select name,color from (SELECT distinct  name,color,price from aaa order by name,color,price) group by name, color  having count(*)>1
дает такой результат
yorri вне форума Ответить с цитированием
Старый 14.03.2019, 21:37   #4
yorri
Пользователь
 
Регистрация: 17.04.2015
Сообщений: 27
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Сгруппировать по name, color, price. Результат сгруппировать по name, color и посчитать количество записей. И выдать из основной таблицы те, у которых это количество больше 1. Это все в одном запросе используя вложенность. В acces еще есть dcount для подсчета количества различных, но как с ним ado не в курсе
а можко пример?
я не силен сильно в sql.
спасибо
yorri вне форума Ответить с цитированием
Старый 14.03.2019, 22:50   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от yorri Посмотреть сообщение
а можко пример?
Цитата:
Сгруппировать по name, color, price. Результат сгруппировать по name, color и посчитать количество записей. И выдать из основной таблицы те, у которых это количество больше 1. Это все в одном запросе используя вложенность.
я попробую представить пример.

так можно получить те name,color, у которых цена разная
Код:
select a2.name,a2.color from
(SELECT name,color,price from aaa 
group by name, color, price) as a2
group by a2.name, a2.color
having count(*)>1
ну и что-то вроде такого для получения искомого результата:
Код:
select a1.* from aaa as a1
inner join (select a2.name,a2.color from
(SELECT name,color,price from aaa 
group by name, color, price) as a2
group by a2.name, a2.color
having count(*)>1) a3 on a3.name=a1.name and a3.color=a1.color
order by a1.name, a1.color

p.s. хотел проверить в MS Access 2010, там он мне поле name не позволил создать.
пришлось переименовывать. Как Вам удалось такое имя в таблице сделать?

Последний раз редактировалось Serge_Bliznykov; 14.03.2019 в 23:01.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.03.2019, 00:02   #6
yorri
Пользователь
 
Регистрация: 17.04.2015
Сообщений: 27
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
я попробую представить пример.

так можно получить те name,color, у которых цена разная
Код:
select a2.name,a2.color from
(SELECT name,color,price from aaa 
group by name, color, price) as a2
group by a2.name, a2.color
having count(*)>1
ну и что-то вроде такого для получения искомого результата:
Код:
select a1.* from aaa as a1
inner join (select a2.name,a2.color from
(SELECT name,color,price from aaa 
group by name, color, price) as a2
group by a2.name, a2.color
having count(*)>1) a3 on a3.name=a1.name and a3.color=a1.color
order by a1.name, a1.color

p.s. хотел проверить в MS Access 2010, там он мне поле name не позволил создать.
пришлось переименовывать. Как Вам удалось такое имя в таблице сделать?
Да, спасибо. Как бы оно! Немножко модифицирую под себя...
yorri вне форума Ответить с цитированием
Старый 15.03.2019, 00:41   #7
yorri
Пользователь
 
Регистрация: 17.04.2015
Сообщений: 27
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение



ну и что-то вроде такого для получения искомого результата:
Код:
select a1.* from aaa as a1
Гм. Не могу в select a1.* from aaa as a1 вставить where...

Последний раз редактировалось yorri; 15.03.2019 в 00:50.
yorri вне форума Ответить с цитированием
Старый 15.03.2019, 10:27   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от yorri Посмотреть сообщение
Гм. Не могу в select a1.* from aaa as a1 вставить where...
там нельзя вставлять WHERE (почитайте основы SQL, например, книжка Мартина Грабера - "Понимание SQL")

попробуйте вставить нужное условие в конце, сразу перед ORDER BY:
Код:
select a1.* from aaa as a1
inner join (select a2.name,a2.color from
(SELECT name,color,price from aaa 
group by name, color, price) as a2
group by a2.name, a2.color
having count(*)>1) a3 on a3.name=a1.name and a3.color=a1.color
WHERE <..условия отбора..>
order by a1.name, a1.color
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.03.2019, 16:20   #9
yorri
Пользователь
 
Регистрация: 17.04.2015
Сообщений: 27
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
там нельзя вставлять WHERE (почитайте основы SQL, например, книжка Мартина Грабера - "Понимание SQL")

попробуйте вставить нужное условие в конце, сразу перед ORDER BY:
Код:
select a1.* from aaa as a1
inner join (select a2.name,a2.color from
(SELECT name,color,price from aaa 
group by name, color, price) as a2
group by a2.name, a2.color
having count(*)>1) a3 on a3.name=a1.name and a3.color=a1.color
WHERE <..условия отбора..>
order by a1.name, a1.color
Спасибо.
yorri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите составить SQL (ADO, Access) запрос для сравнения двух таблиц. yorri БД в Delphi 12 10.02.2018 14:17
Составить запрос на выбор определенных данных - MS Access НадеждаNV Microsoft Office Access 2 29.11.2017 16:31
Помогите составить SQL запрос DarknessLORD11 Помощь студентам 3 24.12.2015 06:35
помогите составить SQL запрос!!!! MAKSA БД в Delphi 12 07.08.2009 11:12
Помогите составить запрос или перепроектировать БД Neurotechnic БД в Delphi 1 27.07.2009 10:51