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

Вниз

Запрос SQL   Найти похожие ветки 

 
elektro   (2002-08-26 14:58) [0]

Есть таблицы:
ТЕЛЕФОНЫ(НОМЕР, ФИО)
АВТОМАТИКА(ПОРЯДКОВЫЙ_НОМЕР, НОМЕР, ДАТА, ДЕНЬГИ)
ПЛАТЕЖИ(ПОРЯДКОВЫЙ_НОМЕР, НОМЕР, ДАТА, ДЕНЬГИ)
Требуется выдать по заданному интервалу номеров телефонов и дат выдать по каждому номеру сумму автоматики и платежей:
НОМЕР_1, СУММА_АВТОМАТИКИ, СУММА_ПЛАТЕЖЕЙ
..........
НОМЕР_ПОСЛЕДНИЙ, СУММА_АВТОМАТИКИ, СУММА_ПЛАТЕЖЕЙ
Если данные отсутствуют, то они = 0.
Реально таблиц побольше, эти для примера.
Написал хранимую процедуру, выдает она результат только для одного телефона, для интервала выдает ошибку - что то вроде multiply rows.
Подскажите, пожалуйста, как составить правильный запрос?


 
Romkin   (2002-08-26 16:09) [1]

for select вместо просто select


 
elektro   (2002-08-27 09:37) [2]

>Romkin © (26.08.02 16:09)
Если написать:
select ТЕЛЕФОНЫ.НОМЕР,sum(АВТОМАТИКА.ДЕНЬГИ)),
sum(ПЛАТЕЖИ.ДЕНЬГИ)
where (ТЕЛЕФОНЫ.НОМЕР>=НОМЕР_1)and
(ТЕЛЕФОНЫ.НОМЕР<=НОМЕР_ПОСЛЕДНИЙ)and
(ТЕЛЕФОНЫ.НОМЕР=АВТОМАТИКА.НОМЕР)and
(ТЕЛЕФОНЫ.НОМЕР=ПЛАТЕЖИ.НОМЕР)and
(УСЛОВИЕ ПО ДАТЕ)
group by ТЕЛЕФОНЫ.НОМЕР
то набор данных по телефонам выдается, но собственно суммы искажены. Если убрать из select: sum(ПЛАТЕЖИ.ДЕНЬГИ), то оставшаяся сумма считается правильно.
А если использовать for select, то выбирать то он будет по такому же алгоритму и давать неправильные суммы ?
Может условие where неправлиьно сформулировал???


 
ЮЮ   (2002-08-27 09:51) [3]

Сделай запрос без group, но добавь АВТОМАТИКА.ПОРЯДКОВЫЙ_НОМЕР и
ПЛАТЕЖИ.ПОРЯДКОВЫЙ_НОМЕР и посмотри какие интересные комбинации у тебя получатся в запросе. Откуда уж здесь взятся правильному суммированию


 
elektro   (2002-08-27 10:04) [4]

>ЮЮ © (27.08.02 09:51)
делал. комбинации очень интересные.
Как суммирование правильно состряпать - не соображу никак.


 
ЮЮ   (2002-08-27 10:19) [5]

Не знаю как в IB c пожзапросами, в MS SQL это было юы так:

select code,RelativesCnt,EducationCnt from
(select CODE from personnel where CODE>10 and CODE<20) personnel
left join
(select person, count(person) RelativesCnt from Relatives group by person) Relatives
on personnel.code=Relatives.person
left join
(select person, count(person) EducationCnt from Education group by person) Education
on personnel.code=Education.person

Таблицы оставил свои, запрос только что опробовал в SQL Explorer-е


 
Romkin   (2002-08-27 10:28) [6]

Да не надо подзапросов, есть хранимые процедуры, с помощью которых это можно сделать гораздо быстрее
Что-то вроде

create procedure sel_summs(Nomer1 <тип>, NomerN <тип>, Data1 date, dataN date)
returns(Number <тип>, Суммаавтоматики numeric(15,2), Сумма платежей numeric(15,2))
as
begin
for select Number from Телефоны
where Number >= Nomer1 and Number <= NomerN
into :Number
do begin
select sum(Деньги) from Платежи
where Номер = :Number and (условие по дате)
into :СуммаПлатежей;
select sum(Деньги) from Автоматика
where Номер = :Number and (условие по дате)
into :СуммаАвтоматики;
suspend;
end
end



 
elektro   (2002-08-27 10:30) [7]

Большое спасибо.
Попробую, хотя насчет такого подзапроса в IB не уверен, что он пропустит.


 
elektro   (2002-08-27 10:42) [8]

>Romkin © (27.08.02 10:28)
Большое спасибо.



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

Форум: "Базы";
Текущий архив: 2002.09.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.012 c
6-50904
Zhlog
2002-07-09 10:22
2002.09.16
Соединение с интернетом. Проблема!!!!!


6-50881
Марина
2002-07-09 09:44
2002.09.16
Использование FastNet


14-50976
Жираф большой
2002-08-20 15:48
2002.09.16
Про яйца


14-50978
Soft
2002-08-22 15:23
2002.09.16
Сайт накопитель по AI


14-50918
KLEVO
2002-08-17 10:23
2002.09.16
А есть ли ...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский