Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.025 c
3-1117222276
Starcom
2005-05-27 23:31
2005.07.11
Как вычис Кол-во лет имея дату занесения и тек в Paradox...


4-1115814772
Неуловимый Джо
2005-05-11 16:32
2005.07.11
API к perfmon


3-1117530104
Hereticsoul
2005-05-31 13:01
2005.07.11
TTable


1-1119371769
Ilg
2005-06-21 20:36
2005.07.11
Генератор случайных чисел


1-1117615963
Griffon
2005-06-01 12:52
2005.07.11
Как записать массив в память