Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ребята! Монстры аксеса помогите!!! Надо запрос сделать очень мудреный! Я незнаю как... / 25 сообщений из 38, страница 1 из 2
25.03.2004, 11:31
    #32456389
# Darth Vader #
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята! Монстры аксеса помогите!!! Надо запрос сделать очень мудреный! Я незнаю как...
Добрый день!

Помогите мне пожалуйста!

Очень надо решить такую задачу.

Имеется некий банк с филиалами. Клиент может иметь несколько счетов, при этом они могут быть размещены как в одном , так и в разных филиалах банка находящихся в разных районах.Каждый клиент , в соответствии со своим счетом, может рассчитывать на некотрый кредит банка. При анализе предметной области были выявлены следующие атрибуты:



Я создал три таблицы и связал их.
Таблицы "Клиент" и "Филиалы" связаны отношением многие ко многим через промежуточную таблицу (с внешними ключами) клиентов.

Вот состав полей

"Клиент"

КодКлиента /PrimaryKey/
ФИО

"Филиал"
НомерФилиала /PrimaryKey/

"Клиент"
НомерСчета /PrimaryKey/
Остаток
Кредит
КодКлиента /ForeignKey/ связь с таблицей клиентов
НомерФлиала / ForeignKey/ связь с таблицей филиалов

Вот заковырка.

Необходимо используя запросы вывести ФИО клиентов которые имеют счета во всех филиалах.

Например Иванов имеет счета в филиале1, филиале2 и филиале3. Петров имеет счета только в первом филиале и втором

Запрос должен вернуть только код и ФИО Петрова, т.к. у него счета во всех филиалах.

Ребята , помогите.

Могу выслать копию базы на мыло, тому кому стало интересно.

Спасибо вам заранее.
...
Рейтинг: 0 / 0
25.03.2004, 11:46
    #32456453
hm
hm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята! Монстры аксеса помогите!!! Надо запрос сделать очень мудреный! Я незнаю как...
>Например Иванов имеет счета в филиале1, филиале2 и филиале3. Петров имеет счета только в первом филиале и втором

>Запрос должен вернуть только код и ФИО Петрова, т.к. у него счета во всех >филиалах.

Может все-таки запрос должен вернуть ФИО Иванова


скинь на registration2005@mail.ru
Пороюсь можь чо получиться
...
Рейтинг: 0 / 0
25.03.2004, 11:51
    #32456463
# Darth Vader #
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята! Монстры аксеса помогите!!! Надо запрос сделать очень мудреный! Я незнаю как...
Ну пусть ФИО Иванова. Посмотри базу и поймешь .

Спасибо что откликнулся!

Скидываю на указанное мыло базу.
...
Рейтинг: 0 / 0
25.03.2004, 12:01
    #32456498
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята! Монстры аксеса помогите!!! Надо запрос сделать очень мудреный! Я незнаю как...
если реальные счета банковских карт с их номерами то и мне скинь ))
...
Рейтинг: 0 / 0
25.03.2004, 12:02
    #32456506
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята! Монстры аксеса помогите!!! Надо запрос сделать очень мудреный! Я незнаю как...
Что-то вроде этого

Код: plaintext
1.
2.
3.
SELECT КодКлиента,КодФилиала,Count(КодФилиала)  FROM Клиенты_Счета
GROUP BY КодКлиента, КодФилиала
HAVING  Count(КодФилиала)=>(Select COUNT(*) FROM Филиал);
...
Рейтинг: 0 / 0
25.03.2004, 12:12
    #32456534
# Darth Vader #
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята! Монстры аксеса помогите!!! Надо запрос сделать очень мудреный! Я незнаю как...
Виктору.

Попробовал,спасибо.

Ругается на вот это место в запросе =>
...
Рейтинг: 0 / 0
25.03.2004, 12:16
    #32456548
hm
hm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята! Монстры аксеса помогите!!! Надо запрос сделать очень мудреный! Я незнаю как...
конкретно для твоей mdb создал еще один запрос

SELECT DISTINCT [ФИО]
FROM Запрос1
WHERE [ФИО] In (SELECT [ФИО] FROM [Запрос1] As Tmp GROUP BY [ФИО] HAVING Count(*)=
(SELECT count(Филиал.НомерФилиала) FROM Филиал)
)
ORDER BY [ФИО];

вроде работает
...
Рейтинг: 0 / 0
25.03.2004, 12:17
    #32456551
SergeySV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята! Монстры аксеса помогите!!! Надо запрос сделать очень мудреный! Я незнаю как...
Мда, честно говоря тоже не просек, мож поподробнее, это как понимать:

Код: plaintext
Count(КодФилиала)=>(Select COUNT(*) FROM Филиал)
...
Рейтинг: 0 / 0
25.03.2004, 12:20
    #32456559
hm
hm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята! Монстры аксеса помогите!!! Надо запрос сделать очень мудреный! Я незнаю как...
если у тебя не работает могу скинуть саму .mdb
...
Рейтинг: 0 / 0
25.03.2004, 12:23
    #32456572
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята! Монстры аксеса помогите!!! Надо запрос сделать очень мудреный! Я незнаю как...
=> такого нет
можно так
>=
...
Рейтинг: 0 / 0
25.03.2004, 12:27
    #32456584
# Darth Vader #
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята! Монстры аксеса помогите!!! Надо запрос сделать очень мудреный! Я незнаю как...
Спасибо заработало.

Есть!

Hm

Ты просто молодец . спасибо , работает. Правда через запрос дополнительный . Но пойдет . Как без запроса "Запрос1" это сделать интересно?

Нет слов , спасибо тебе.

Виктору

Может и твой вариант как то исправить?


Вот еще это надо сделать и все. Сделать запросы.

1. Вывести клиентов, которые имеют по одному счету в разных филиалах банка

2. Вывести филиалы ,которые не имеют ни одного клиента

2. Вывести филиалы, которые имеют клиентов с остатком на счету 0.
...
Рейтинг: 0 / 0
25.03.2004, 12:33
    #32456599
hm
hm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята! Монстры аксеса помогите!!! Надо запрос сделать очень мудреный! Я незнаю как...
если хочешь тоже самое в одном запросе, то вот

SELECT DISTINCT [ФИО]
FROM
(SELECT DISTINCTROW Клиент.ФИО, СчетКлиента.НомерФилиала
FROM Филиал INNER JOIN (Клиент INNER JOIN СчетКлиента ON Клиент.КодКлиента = СчетКлиента.КодКлиента) ON Филиал.НомерФилиала = СчетКлиента.НомерФилиала)
WHERE [ФИО] In (SELECT [ФИО] FROM [Запрос1] As Tmp GROUP BY [ФИО] HAVING Count(*)=
(SELECT count(Филиал.НомерФилиала) FROM Филиал)
)
ORDER BY [ФИО];

ЗЫ: вот только еще не успел подумать как это хозяйство будет работать,
если у одного клиента в одном филиале больше одного счета
...
Рейтинг: 0 / 0
25.03.2004, 12:40
    #32456624
# Darth Vader #
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята! Монстры аксеса помогите!!! Надо запрос сделать очень мудреный! Я незнаю как...
То что нужно , только все равно запрос "Запрос1 " используется.
???
...
Рейтинг: 0 / 0
25.03.2004, 13:05
    #32456700
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята! Монстры аксеса помогите!!! Надо запрос сделать очень мудреный! Я незнаю как...
=> такого нет
можно так
>=

Ну быфает, ну исфините :)

Мда, честно говоря тоже не просек, мож поподробнее, это как понимать:

Очень просто: так как группировка по Коду клиента и коду филиала, то Count вернет кол-во записей филиалов в которых есть данный клиент. И сравниваем с кол-вом самих филиалов (Select COUNT(*) FROM Филиал). >= нужно если в 1 филиале несколько счетов одного клиента.
Сам запрос не проверял - но вроде логика вроде правильная.
...
Рейтинг: 0 / 0
25.03.2004, 13:13
    #32456722
# Darth Vader #
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята! Монстры аксеса помогите!!! Надо запрос сделать очень мудреный! Я незнаю как...
Ребята спасибо, через пару часов вернусь!
...
Рейтинг: 0 / 0
25.03.2004, 13:35
    #32456779
Ребята! Монстры аксеса помогите!!! Надо запрос сделать очень мудреный! Я незнаю как...
А просто через Декартово произведение?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT К.КодКлиента, К.ФИО
FROM Филиал AS Ф, Клиент AS К
WHERE NOT Exists 
 (SELECT С.КодКлиента, С.НомерФлиала
   FROM [СчетКлиента] AS С 
   WHERE С.НомерФлиала = Ф.НомерФилиала
    AND С.КодКлиента=К.КодКлиента
    );
- это все те, кто _не имеет_ во всех

и, соответсвенно:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT К2.КодКлиента, К2.ФИО
FROM Клиент AS К2
WHERE NOT EXISTS(
  SELECT *
  FROM Филиал AS Ф, Клиент AS К
  WHERE К.КодКлиента =К2.КодКлиента 
  AND NOT Exists (
     SELECT С.КодКлиента, С.НомерФлиала
     FROM [СчетКлиента] AS С
     WHERE С.НомерФлиала = Ф.НомерФилиала
      AND С.КодКлиента=К.КодКлиента
     )
   )
;


- те, которые имеют во всех. (Вот токо про быстродействие не сабражу)
...
Рейтинг: 0 / 0
25.03.2004, 14:01
    #32456868
2 Senin Viktor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята! Монстры аксеса помогите!!! Надо запрос сделать очень мудреный! Я незнаю как...
2 Senin Viktor
ваш запрос не прокатит, ИМХО (даже с правкой ситаксиса). Ибо надо СНАЧАЛА сделать группировку и по клиенту и филиалу, ПОТОМ (от него) еще раз сделать группировку только по клиенту и посчитать каунт (разных) филиалов (по клиенту). Иначе либо получите число счетов в данном филиале (группировка по филиалу в конечном запросе), либо число счетов всего (если выкинете группировку по филиалу в конечном) и если допустимо иметь несколько счетов в одном филиале - получите ошибку).

по крайней мере в 97 :
Count()Хотя аргумент выражение допускает выполнение вычислений над полем, функция Count возвращает просто количество записей, независимо от того, какие данные содержатся в этих записях.

Функция Count не подсчитывает записи со значениями Null,
...
Рейтинг: 0 / 0
25.03.2004, 14:48
    #32457011
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята! Монстры аксеса помогите!!! Надо запрос сделать очень мудреный! Я незнаю как...
Ты прав :(
...
Рейтинг: 0 / 0
25.03.2004, 15:13
    #32457071
# Darth Vader #
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята! Монстры аксеса помогите!!! Надо запрос сделать очень мудреный! Я незнаю как...
Цены вам нет господа Монстры.

Покатило , через декартово. Спасибо. Работает!

Осталось только это.

1. Вывести клиентов, которые имеют по одному счету в разных филиалах банка
2. Вывести филиалы ,которые не имеют ни одного клиента
2. Вывести филиалы, которые имеют клиентов с остатком на счету 0.
...
Рейтинг: 0 / 0
25.03.2004, 15:37
    #32457130
# Darth Vader #
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята! Монстры аксеса помогите!!! Надо запрос сделать очень мудреный! Я незнаю как...
Монстры убежали кушать базы
Ребята.
...
Рейтинг: 0 / 0
25.03.2004, 15:53
    #32457179
# Darth Vader #
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята! Монстры аксеса помогите!!! Надо запрос сделать очень мудреный! Я незнаю как...
Сделал это: Вывести филиалы, которые имеют клиентов с остатком на счету 0.

SELECT DISTINCTROW СчетКлиента.НомерФилиала
FROM Филиал INNER JOIN СчетКлиента ON Филиал.НомерФилиала = СчетКлиента.НомерФилиала
GROUP BY СчетКлиента.НомерФилиала, СчетКлиента.Остаток
HAVING (((СчетКлиента.Остаток)=0));

Осталось как вывести клиентов, которые имеют по одному счету в разных филиалах банка.
...
Рейтинг: 0 / 0
26.03.2004, 08:56
    #32457898
# Darth Vader #
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята! Монстры аксеса помогите!!! Надо запрос сделать очень мудреный! Я незнаю как...
Наступил последний день...

1. Вывести клиентов, которые имеют по одному счету в разных филиалах банка
2. Вывести филиалы ,которые не имеют ни одного клиента
...
Рейтинг: 0 / 0
26.03.2004, 11:05
    #32458090
как-то так
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята! Монстры аксеса помогите!!! Надо запрос сделать очень мудреный! Я незнаю как...
Если не заботиться об оптимальности, то:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SELECT К2.КодКлиента, К2.ФИО
FROM Клиент AS К2
WHERE Not Exists 
   (SELECT *
   FROM Филиал AS Ф, Клиент AS К
   WHERE К.КодКлиента =К2.КодКлиента 
    AND NOT Exists 
          (SELECT С.КодКлиента, С.НомерФлиала
          FROM [СчетКлиента] AS С
          WHERE С.НомерФлиала = Ф.НомерФилиала
           AND С.КодКлиента=К.КодКлиента
))  AND NOT EXISTS
(
SELECT С0.КодКлиента
   FROM [СчетКлиента] AS С0
   WHERE  С0.КодКлиента =К2.КодКлиента 
   GROUP BY С0.КодКлиента, С0.НомерФлиала
   HAVING (Count(*))> 1 
)
;


и
Код: plaintext
1.
2.
3.
4.
SELECT Ф.НомерФилиала
   FROM Филиал AS Ф 
   LEFT JOIN [СчетКлиента] AS С 
  ON Ф.НомерФилиала = С.НомерФлиала
  WHERE (((С.НомерСчета) Is Null));
...
Рейтинг: 0 / 0
26.03.2004, 14:24
    #32458632
# Darth Vader #
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята! Монстры аксеса помогите!!! Надо запрос сделать очень мудреный! Я незнаю как...
Спасибо.Со вторым разобрался , а спервым не выходит.Не возвращает записей запрос.Хотя скажем у Иванова один счет в филиале1, один счет в филиале2, вот его фио и код должно вылезти.
Осталось только это сделать, все остальное с вашей помощью сделал.

Спасибо.

Что не так в запросе?
...
Рейтинг: 0 / 0
26.03.2004, 14:34
    #32458661
hm
hm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята! Монстры аксеса помогите!!! Надо запрос сделать очень мудреный! Я незнаю как...
автор
1. Вывести клиентов, которые имеют по одному счету в разных филиалах банка

имеется в виду что обязятельно в каждом филиале банка должен быть ровно один счет клиента?

или как?
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ребята! Монстры аксеса помогите!!! Надо запрос сделать очень мудреный! Я незнаю как... / 25 сообщений из 38, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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