powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос на выборку!
9 сообщений из 9, страница 1 из 1
Запрос на выборку!
    #39236170
MihailPetrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте форумчане!

Помогите создать небольшой запрос, пожалуйста!

Имеется небольшая таблица во вложении нужно вывести ФИО клиента, который покупал только одну Марку! и более одного раза..

Пример-

Покупатели==
Код 1 \ ФИО Сидоров
КОД 2 \ ФИО Иванов
============

Марка=====
Код 1 \Марка Лада
Код 2 \ Марка Уаз
============

Продажи====
Код 1 \ Марка Лада \ ФИО Сидоров 2013
Код 2 \ Марка Лада \ ФИО Сидоров 2014
Код 3 \ Марка Уаз \ ФИО Иванов 2015
Код 4 \Марка Лада \ ФИО Иванов 2016
=================

Правильный ответ будет Сидоров(покупал одну и ту же марку более одного раза).
Понятно как вывести таблицу пару значений ФИО - Покупка

Код: plsql
1.
2.
3.
4.
SELECT Покупатели.ФИО, COUNT( Продажи.Марка)
FROM Покупатели, Продажи
WHERE Покупатели.Код = Продажи.ФИО
GROUP BY Покупатели.ФИО



А как это сделать не очень понятно..

Заранее благодарю за ответ!
...
Рейтинг: 0 / 0
Запрос на выборку!
    #39236173
MihailPetrov,

я не спец по запросам, тем более с группировкой... Предпочитаю все считать в коде. Схема у тебя, навскидку, правильная. Я бы считал бы через рекордсет кросса, где ид удовлетворяют и число записей на выхлопе больше одной. Дешево и сердито.
.
...
Рейтинг: 0 / 0
Запрос на выборку!
    #39236181
Виноват. Поторопился. Чуть сложнее.

Циклом через тот же кросс пробегаем по клиентам и подхватываем в массив ид тех, у кого уникальных записей по марке всего одна. А с массивом уже делай что хошь... Зуб даю - на серьезном объеме будет быстрее чем через километровый осьминого-подобный запрос.

Перечитал ТЗ - опять немного не то, млин, но, где-то так... близко.
.
...
Рейтинг: 0 / 0
Запрос на выборку!
    #39236182
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HAVING COUNT(marka)>1 AND COUNT(DISTINCT marka)=1
...
Рейтинг: 0 / 0
Запрос на выборку!
    #39236186
MihailPetrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,Спасибо)
Получается примерно так?

Код: plsql
1.
2.
3.
4.
5.
SELECT Покупатели.ФИО
FROM Покупатели
WHERE Покупатели.Код = Продажи.ФИО
GROUP BY Покупатели.ФИО
HAVING COUNT(Продажи.Марка)>1 AND COUNT(DISTINCT Продажи.Марка)=1



Ругается на COUNT(DISTINCT , дескать ошибка синтаксиса пропущен оператор!
...
Рейтинг: 0 / 0
Запрос на выборку!
    #39236188
MihailPetrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот такая штучка тоже не прокатывает..
Код: plsql
1.
2.
3.
4.
SELECT Покупатели.ФИО
FROM Покупатели INNER JOIN Продажи ON Покупатели.Код = Продажи.ФИО
GROUP BY Покупатели.ФИО
HAVING COUNT(Продажи.Марка)>1 AND COUNT(DISTINCT Продажи.Марка)=1



Не поддерживает DISTINCT внутри конструкции COUNT()
...
Рейтинг: 0 / 0
Запрос на выборку!
    #39236189
Akina,

респект.
Вот я на это оперся бы и, все равно, в коде :)
Для себя, есно...
.
...
Рейтинг: 0 / 0
Запрос на выборку!
    #39236226
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MihailPetrovВот такая штучка тоже не прокатывает..
Код: plsql
1.
2.
3.
4.
SELECT Покупатели.ФИО
FROM Покупатели INNER JOIN Продажи ON Покупатели.Код = Продажи.ФИО
GROUP BY Покупатели.ФИО
HAVING COUNT(Продажи.Марка)>1 AND COUNT(DISTINCT Продажи.Марка)=1



Не поддерживает DISTINCT внутри конструкции COUNT()
Обычный Access не поддерживает DISTINCT внутри COUNT. Чтобы поддерживало необходимо подключить "Синтаксис для SQL Server (ANSI 92)". Но делать этого я не рекомендую, база станет глючным и иногда будет вылетать с непонятной ошибкой.
Есть другой выход. Используйте ADO или же Application.CurrentProject (последний также относиться к ADO). Вот там без проблем можете использовать COUNT(DISTINCT ...).
А если Вам нужен именно запрос, то тогда можно переделать этот запрос, использовав внутренний подзапрос.
...
Рейтинг: 0 / 0
Запрос на выборку!
    #39236236
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studieren...
А если Вам нужен именно запрос, то тогда можно переделать этот запрос, использовав внутренний подзапрос.
Что-то вроде этого
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT Cust.ФИО
FROM (SELECT C.ФИО, S.Марка, COUNT(S.Марка) AS N
    FROM Покупатели AS C INNER JOIN Продажи AS S ON C.Код = S.ФИО
    GROUP BY C.ФИО, S.Марка) AS Cust
WHERE Cust.N > 1
GROUP BY Cust.ФИО
HAVING COUNT(Cust.Марка)=1
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запрос на выборку!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]