Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.28;
Скачать: CL | DM;

Вниз

SQL запрос с несколькими таблицами с несоответствием...   Найти похожие ветки 

 
Alexsys ©   (2002-10-03 18:34) [0]

Народ, помогите, пожалуйста запрос построить... Никак не получается...
В базе куча таблиц, мне нужны 5 из них:
LICACC (ID, PRIZN ...) - клиенты (физлица и юрлица)
ULICACC (IDCLIENT, NAME ...) - анкеты клиентов - юрлиц
USHET (IDCLIENT, MM, YY, VSEGO ...) - начисления юрлицам
UPLAT (IDCLIENT, MM, YY, VSEGO ...) - платежи юрлиц
ULICDOP (IDCLIENT...) - ненужные клиенты
Каждый месяц у клиентов по несколько начислений и платежей.
Пишу вот такой запрос:
SELECT Licacc.ID, Ulicacc.NAME, SUM( Ushet.VSEGO ), SUM( Uplat.VSEGO )
FROM LICACC Licacc
INNER JOIN ULICACC Ulicacc
ON (Licacc.ID = Ulicacc.IDCLIENT)
INNER JOIN USHET Ushet
ON (Licacc.ID = Ushet.IDCLIENT)
INNER JOIN UPLAT Uplat
ON (Licacc.ID = Uplat.IDCLIENT)
WHERE (Licacc.PRZZ = "U")
AND (Ushet.MM = 9)
AND (Ushet.YY = 2002)
AND (Uplat.MM = 9)
AND (Uplat.YY = 2002)
GROUP BY Licacc.ID, Ulicacc.NAME
ORDER BY Ulicacc.NAME
В результате получаю выборку, в которой нет клиентов, у которых не было ни одного платежа, а надо бы, чтобы стоял 0. Как бы мне это прописать?
И еще: как бы убрать из этой выборки клиентов, которые есть в таблице ULICDOP?


 
Lar   (2002-10-03 19:28) [1]

У Вас, судя по запросу, каждой строке таблицы LICACC соответствует одна (и только одна) строка таблицы ULICACC. Если это не так, то я чего-то не понял.
Если это так, то (не вдаваясь в рассуждения, насколько удачно такое деление) в секции FROM нужно заменить "INNER" на "LEFT", а в секции WHERE нужно добавить условие AND (not exists (select * from ULICDOP where ULICDOP.IDCLIENT=LICACC.ID))


 
Alexsys ©   (2002-10-03 19:50) [2]

LEFT тоже не помогает. Та же история. Если нет хотя бы одной записи в UPLAT - этого клиента в выборке нет, а нужен со значением 0!
За ULICDOP - большое спасибо.


 
Alexsys ©   (2002-10-03 22:02) [3]

Неужели никто не подскажет?
Тады ой! Меня похоронят завтра... Подскажите хоть какой-нибудь выход..


 
ЮЮ ©   (2002-10-04 05:43) [4]

WHERE (Licacc.PRZZ = "U")
AND (Ushet.MM = 9)
AND (Ushet.YY = 2002)
AND (Uplat.MM = 9)
AND (Uplat.YY = 2002)

Как же они останутся в выборке, если они отсекаются условием выборки?



 
Alexsys ©   (2002-10-04 09:36) [5]

В базе данные по всем месяцам, мне нужны за сентябрь...
Если они есть - тогда значение - сумма, если таких нет - то 0!
Например:
ID NAME VSEGO(USHET) VSEGO(UPLAT)
------------------------------------------
1 Завод 12345,67 11111,11 - Есть платежи в сентябре
...
55 Фабрика 999,99 0,00 - Нет платежей в сентябре

Такое можно сделать? Очень нужно...


 
Johnmen ©   (2002-10-04 09:56) [6]

SELECT , Ulicacc.NAME, SUM( Ushet.VSEGO ), SUM( Uplat.VSEGO )
FROM LICACC Licacc
JOIN ULICACC Ulicacc
ON (Licacc.ID = Ulicacc.IDCLIENT)
INNER JOIN USHET Ushet
ON (Licacc.ID = Ushet.IDCLIENT)
LEFT JOIN UPLAT Uplat
ON (Licacc.ID = Uplat.IDCLIENT)
WHERE (Licacc.PRZZ = "U")
AND (Ushet.MM = 9)
AND (Ushet.YY = 2002)
AND (Uplat.MM = 9)
AND (Uplat.YY = 2002)
AND (NOT EXISTS
(SELECT ULICDOP.IDCLIENT FROM ULICDOP
WHERE ULICDOP.IDCLIENT = Licacc.ID))

GROUP BY Licacc.ID, Ulicacc.NAME
ORDER BY Ulicacc.NAMEВ


 
NDeu ©   (2002-10-04 10:24) [7]

Если уже не похоронили попробуй это:
(твой select)
Union
SELECT Licacc.ID, Ulicacc.NAME, 0, 0
from Licacc
left JOIN ULICACC Ulicacc
ON (Licacc.ID = Ulicacc.IDCLIENT)
where Licacc.ID not in (твой select)


 
Alexsys ©   (2002-10-04 18:54) [8]

:-) Не похоронили. Выкрутился через создание новой таблички, в которую напихал то, что хотел. Криво, но работает.
Всем спасибо большое. Переделаю заново.



Страницы: 1 вся ветка

Текущий архив: 2002.10.28;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
3-92392
Шурик Ш
2002-10-08 13:10
2002.10.28
Помогите составить запрос


1-92435
kukuikar
2002-10-17 19:26
2002.10.28
Хорошо, иконку втрей загонять научился... почти понял... Теперь к


3-92383
StAL
2002-10-07 13:23
2002.10.28
Фильтрация таблицы с помощью события OnFilterRecord


14-92703
Leon_O
2002-10-08 09:53
2002.10.28
Delphi 7


14-92655
Cr@sh
2002-10-06 10:44
2002.10.28
Где можно найти хороший бесплатный форум?