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

Вниз

Результат сумирования одной строкой, а не двумя   Найти похожие ветки 

 
korvin   (2004-08-19 13:43) [0]

запрос1</b
select id_pole, sum(pole1) from tabl1
union
select id_pole, sum(pole1) from tabl2

даёт результат двумя строчками. В обход делаю серверную процедуру:procedure1
begin
 for select id_pole, sum(pole1) from tabl1
 group by id_pole
 union
 select id_pole, sum(pole1) from tabl1
 group by pole_name
 into  :pole_name,
       :pole1
 do suspend;
end
обращаясь к которой
запрос2select pole_name, sum(pole1) from procedure1 where pole2=10 получаю наконец итог одной строкой.
Из-за большого количества записей в таблицах tabl1 и tabl2 такая процедура "умирает" секунд на 40-60 на мощной машине.
Покажите пожалуйста на этом примере куда в процедуру можно втиснуть параметры и как их передавать из программы для поля pole2 через запрос1</b.


 
Карелин Артем ©   (2004-08-19 13:46) [1]

select (select id_pole, sum(pole1) from tabl1)+(select id_pole, sum(pole1) from tabl2) from rdb$database


 
Карелин Артем ©   (2004-08-19 13:48) [2]

Ошибся слегка. [1] работать в принципе не будет.


 
Соловьев ©   (2004-08-19 14:04) [3]

а если так:
select t1.id_pole, sum(t1.pole1+t2.pole1)
from table1 t1 join table2 t2 on t1.id_pole=t2.id_pole


 
Соловьев ©   (2004-08-19 14:05) [4]

забыл
+
group by t1.id_pole


 
korvin   (2004-08-19 18:21) [5]

Соловьев ©   (19.08.04 14:04) [3]
Соловьев ©   (19.08.04 14:05) [4]

Да, это почти то, что нужно. Только вот суммы эти умножаются кратно количеству записей в tabl2 (из таблицы 1 берёт первую запись столько раз, сколько записей во второй таблице).
Например: в tabl1 по заданным условиям найдены значения 1, 5, 3, а во втором tabl им соответствуют записи со значениями 2, 1 (две записи). То запрос выдаёт сумму: 1*2+5*2+3*2+2*3+1*3=37, а должно бы: 1+5+3+2+1=12.
К чему бы ещё уникальность привязать?


 
korvin   (2004-08-19 18:22) [6]

Апшибся и я 1*2+5*2+3*2+2*3+1*3=27, но всё равно это не 12 как должно бы ...


 
Соловьев ©   (2004-08-19 18:30) [7]

попробуй так
select t1.id_pole, sum(t1.pole1+(
select sum(t2.pole1)
from table2 t2
where t2.id_pole=t2.id_pole
))
from table1 t1
group by t1.id_pole


 
Соловьев ©   (2004-08-19 18:31) [8]

where t2.id_pole=t1.id_pole



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

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

Наверх




Память: 0.46 MB
Время: 0.035 c
1-1094544590
Koala
2004-09-07 12:09
2004.09.19
Как отменить ColumnResize у ListView


3-1092898465
mouse_web
2004-08-19 10:54
2004.09.19
Изменение курсора


1-1094201216
P@vel
2004-09-03 12:46
2004.09.19
TmemoryStream


14-1092885095
КаПиБаРа
2004-08-19 07:11
2004.09.19
Тестирование ПО под разными OS


14-1093867492
ydv
2004-08-30 16:04
2004.09.19
Метод Фолля





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