Форум: "Базы";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];
ВнизДва запроса Найти похожие ветки
← →
Itonix © (2006-10-03 11:47) [0]У меня есть два запроса: один счиатет общееколичество,а второй - конкретно по компании (к примеру). такого вида:
1)
select count (distinct ank_nom) form ...
...тут join`ы...
group by nom _isled
2) select name_comp,nom_isled,count(ank_nom) from
...тут join`ы...
group by name_comp,nom_isled
Оба выполянють в ibQuery , но второй содержит еще поле fkCalculated которое должно расчитываеться как деление одной записи из второго запроса на первый (в onCalculated).
проблема вот в чем:
к примеру первый запрос вернет нам такое
NOM_ISLED COUNT
1 2000
2 3000
второй:
NAME_COMP NOM_SILED COUNT
Comp1 1 100
Comp1 2 150
Comp2 1 200
Comp3 2 300
должно посчитать мое поле таким макаром:
NOM_ISLED
1 -Comp1 - 100/2000 Comp2 - 200/2000
2 -Comp1 - 150/3000 Comp2 - 300/3000
я не знаю как правильно организовать этот расчет.
если делать так:
OnCalculated (второго запроса, ддд - расчетное поле):
ibQuery2.fieldbyname("ddd").asFloat:=ibQuery2.fieldbyNmae("name_comp").asInteger /ibQuery1.fiedlbyname("COUNT").asInteger;
то числа получаються в результате не те что мне надо (оно и понятно, он будет брать только первую запись из 1-го запроса).
как можно это исправить? уже 2 дня думаю и придумать не могу (а если еще учесть что в оба запроса могут добавляться разные группировки......)
← →
Sergey13 © (2006-10-03 11:56) [1]А первый запрос для чего-то еще нужен? Почему нельзя получать нужную цифирь прямо во втором запросе?
← →
dr Gonzo © (2006-10-03 12:01) [2]А не проще ли написать SQL который сразу все посчитает ?
Select *, A.ACount / B.ACount
FROM A(....)
join B(....) ON A.Nom_Siled = B.NOM_ISLED
A - запрос который по фирмам
B - итоговый
Если A и B оформить в виде хранимых процедур будет удобно. IB и FB умеет работать с Select из процедур.
← →
Itonix © (2006-10-03 12:22) [3]он не будет запускать процедуру для каждой строик заново?если да- это же долго будет.
и еще - запросы создаютьбся динамически и поля группировки и поля в селекте (для второго) будут разные. как это заюзать в процедуре?
← →
Itonix © (2006-10-03 12:25) [4]для [1] - разные соеденения, суть задачи так предполагает
← →
Sergey13 © (2006-10-03 12:58) [5]> [4] Itonix © (03.10.06 12:25)
В принципе не суть важно. Попробуй приделать ко 2 запросу первый.
Для того, что бы работало как есть надо перед расчетом поля локейтиться на нужную запись первого запроса по NOM_SILED.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.046 c