Главная страница
    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.46 MB
Время: 0.04 c
1-1118494263
Pasha L
2005-06-11 16:51
2005.07.11
FILETIME


14-1118408792
tema
2005-06-10 17:06
2005.07.11
Системы счисления...


8-1110562111
Штотоносец
2005-03-11 20:28
2005.07.11
Алгоритм преобразования монохромного изображения


4-1116082031
TForm1
2005-05-14 18:47
2005.07.11
Запуск внутри...


6-1112615487
NikeOLD
2005-04-04 15:51
2005.07.11
Можно ли получить список модемов не используя реестр (как?)





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