Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.07.11;
Скачать: [xml.tar.bz2];

Вниз

Проблема использования сложных запросов с агрегатами   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.042 c
4-1115595703
NikNet
2005-05-09 03:41
2005.07.11
PopupMenu! как сделать для ListView (WinAPI)???


3-1117001327
ANB
2005-05-25 10:08
2005.07.11
Как скопировать таблицу из схемы в схему (Oracle)


3-1117199951
ryds
2005-05-27 17:19
2005.07.11
Слияние двух баз данных InterBase


4-1116439951
pound
2005-05-18 22:12
2005.07.11
бит чётности


9-1110377372
mr_Coder
2005-03-09 17:09
2005.07.11
Вопрос новичка по GLScene





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