Текущий архив: 2005.07.11;
Скачать: CL | DM;
ВнизПроблема использования сложных запросов с агрегатами Найти похожие ветки
← →
highlander (2005-05-27 15:29) [0]Есть такой код:
select
products.kod,0,0,sum(oderj.kilkist),sum(oderj.summa),sum(razhod.kilkist),
sum(razhod.kilkist)*razhod.cena,sum(oderj.kilkist)-sum(razhod.kilkist),
sum(oderj.summa)- sum(razhod.kilkist)*razhod.cena
from products
join oderj on oderj.kod_tovar=products.kod
join razhod on razhod.kod_tovar=products.kod
where oderj.kod_tovar not in (select poch_zalish.kod_tovar from poch_zalish)
and razhod.kod_tovar not in (select poch_zalish.kod_tovar from poch_zalish)
and oderj.data_nakl between "01.04.05" and "30.04.05"
and razhod.data_nakl between "01.04.05" and "30.04.05"
group by products.kod,oderj.kod_tovar,razhod.kod_tovar
Данный код предназначен для выборки из 4 таблиц парадокса (products(kod N,name A),poch_zalish(kod_tovar N, suma $),oderj(kod_tovar A, cena $,summa $, data_nakl D), razhod(kod_tovar A, cena $,data_nakl D)). Запрос выполняется, но не совсем правильно. Выборка по полям sum(oderj.kilkist) и sum(oderj.summa) выполняется правильно. А вот по полям sum(razhod.kilkist) и sum(razhod.kilkist)*razhod.cena суммирование производится дважды. Почему?
← →
Johnmen © (2005-05-27 15:39) [1]Потому, что после соединения они дважды присутствуют в наборе данных.
← →
Johnmen © (2005-05-27 15:41) [2]...до агрегирования.
← →
highlander (2005-05-27 15:49) [3]Johnmen ©
а как исправить? можете подсказать? а то голова не соображает уже. еще со вчерашнего дня парюсь.
← →
Johnmen © (2005-05-27 15:51) [4]>highlander (27.05.05 15:49) [3]
Не парься. В Парадоксе одним, сколь угодно сложным запросом, это не реализуемо.
← →
highlander (2005-05-27 15:59) [5]Но должен ведь быть какой-то выход!! перейти на другую базу уже нет времени да и возможности.
← →
Johnmen © (2005-05-27 16:00) [6]Выход один - сделать 2 запроса. Или 3. Сколько надо, короче...
← →
highlander (2005-05-27 16:46) [7]А одним запросом никак нельзя? Вообще никак??
← →
Johnmen © (2005-05-27 16:50) [8]Вообще можно. Но в частности (Парадох) - нельзя.
← →
highlander (2005-05-27 17:00) [9]а можно узнать в какой субд такое можно сделать и как (на основе вышеуказанного запроса)
← →
evvcom © (2005-05-27 17:07) [10]В "продвинутых" можно: MSSQL, Oracle, наверное в IB, FB. Реализуется так
select t1.id, sq2.sum1, sq3.sum2
from t1
inner join (select id, sum(field1) as sum1 from t2 group by id) sq2
on sq2.id=t1.id
inner join (select id, sum(field2) as sum2 from t3 group by id) sq3
on sq3.id=t1.id
← →
evvcom © (2005-05-27 17:09) [11]или вместо inner - left, right, full в зависимости от задачи
Страницы: 1 вся ветка
Текущий архив: 2005.07.11;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.04 c