![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Результат сумирования одной строкой, а не двумя [D6, IB6.x]
korvin © (2004-08-19 13:43:00)запрос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 18:31:00) [1]where t2.id_pole=t 1.id_pole
Соловьев (2004-08-19 18:30:00) [2]попробуй так
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
korvin (2004-08-19 18:22:00) [3]Апшибся и я 1*2+5*2+3*2+2*3+1*3=27, но всё равно это не 12 как должно бы ...
korvin (2004-08-19 18:21:00) [4]Соловьев © (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.
К чему бы ещё уникальность привязать?
Соловьев (2004-08-19 14:05:00) [5]забыл
+
group by t1.id_pole
Соловьев (2004-08-19 14:04:00) [6]а если так:
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 13:48:00) [7]Ошибся слегка. [1] работать в принципе не будет.
Карелин Артем (2004-08-19 13:46:00) [8]select (select id_pole, sum(pole1) from tabl1)+(select id_pole, sum(pole1) from tabl2) from rdb$database