Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.10.28;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.009 c
4-92811
Spy
2002-09-06 12:25
2002.10.28
Как узнать все открытые на компе mailslot ы?


7-92751
CkuB
2002-08-19 00:07
2002.10.28
разрешение принтера


1-92501
Sova
2002-10-15 11:19
2002.10.28
Разрешения экрана и размер фонтов.


1-92551
Freeze
2002-10-16 13:58
2002.10.28
Компонент TDateTimePicker


4-92780
Tihas
2002-09-13 21:05
2002.10.28
Как самым быстрым способом, прочитать BMP файл.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский