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

Вниз

SQL запрос. Сумма по 2 таблицам. Уже 2 часа думаю   Найти похожие ветки 

 
Ops   (2003-01-14 16:08) [0]

Есть две таблицы одинаковые
Таблица 1
дата1 сумма1
дата1 сумма2
дата1 сумма3
дата2 сумма4

Таблица 2
дата1 сумма1
дата1 сумма2
дата1 сумма3
дата2 сумма4

Нужно получить
Дыта1 SUM(СуммаДыта1Taбл1) + SUM(СуммаДыта1Taбл2)
Дыта2 SUM(СуммаДыта2Taбл1) + SUM(СуммаДыта2Taбл2)


 
still   (2003-01-14 16:16) [1]

проще всего - отдельно
сначала получить одну сумму, потом другую, потом сложить


 
Ops   (2003-01-14 16:33) [2]

Так хочется красив через SQL
Может через View это сделать???
1 во view их объеденить
2 в запросе просто просумировать???


 
stone   (2003-01-14 16:36) [3]

можно использовать union


 
bilkm   (2003-01-14 16:40) [4]

select
t1.поле_дата,
sum(t1.поле_сума) + sum(t2.поле_сума)
from (Таблица 1) t1 join (Таблица 2) t2 on
(t1.поле_дата = t2.поле_дата) and (t1.поле_сума = t2.поле_сума)
group by t1.поле_дата


 
bilkm   (2003-01-14 16:52) [5]

(Таблица 1) t1 join (Таблица 2) t2 on
(t1.поле_дата = t2.поле_дата) and (t1.поле_сума = t2.поле_сума)

вместо условия on
(t1.поле_дата = t2.поле_дата) and (t1.поле_сума = t2.поле_сума)
можна связать таблици по primary_key если такой имеется


 
Johnmen   (2003-01-14 17:44) [6]

>bilkm

Все приведенные примеры неверны...:(

>Ops

SELECT
T1.d,
(SUM(T1.s)+(SELECT SUM(T2.s) FROM T2 WHERE T2.d=T1.d)) AS SSS
FROM T1
GROUP BY T1.d

Единственный нюанс - когда в T2 нет записей с соответствующей датой из T1. Тогда вторая сумма=null и т.д.


 
neXt   (2003-01-14 18:26) [7]

Johnmen ©, в Вашем примере есть один недостаток, а именно
если в таблице T2 есть записи с датой отсутствующей в T1, то суммы за эту дату не выведутся! Это потеря данных. Так что, Ваше утверждение "Все приведенные примеры неверны...:(" остаётся в силе....
:)


 
neXt   (2003-01-14 18:44) [8]

Могу сказать как это сделать одним запросом на MSSQL2000, деталей диалекта в IB не знаю, так что может быть там такой вариант не прокатит.

select
td.d,
isnull(sum(T1.s), 0) + isnull(sum(T2.s), 0)
from
(select distinct d
from T1
union
select distinct d
from T2) td,
T1, T2
where td.d *= T1.d
and td.d *= T2.d
group by td.d


 
ЮЮ   (2003-01-15 03:28) [9]

в MSSQL (да и в Paradox под БДЕ) можно и проще:

select
dt, sum(sm)
from
(select dt, sm from T1
union
select dt, sm from T2) T1T2
group by dt
order by dt


 
Johnmen   (2003-01-15 13:34) [10]

>neXt © (14.01.03 18:26)
>...в Вашем примере есть один недостаток, а именно
>если в таблице T2 есть записи с датой отсутствующей в T1...

Ты был невнимателен. Я на этот нюанс намекнул.

>neXt © (14.01.03 18:44)
>ЮЮ © (15.01.03 03:28)

Можно сколько угодно приводить примеров (MSSQL, Oracle, DB2, Paradox, DBase .....), только вопрос поставлен конкретно для IB...:)


 
Fareader   (2003-01-15 13:43) [11]

А почему бы не "склеить" результаты этих двух запросов в хранимой процедуре?


 
Val   (2003-01-15 13:46) [12]

о нюансе: варианты, на мой взгляд, либо найти/написать udf типа nvl/isnull, либо хп.


 
Sergey13   (2003-01-15 13:55) [13]

2Val © (15.01.03 13:46)
либо вьюха по подзапросу ЮЮ © (15.01.03 03:28) - самое простое, ИМХО.


 
Alexandr   (2003-01-15 14:05) [14]

угу. Но, видать нехватка клея\udf\ума сказывается...


 
Ops   (2003-01-15 15:42) [15]

Решение оказалось через view
CREATE VIEW SUMMAALL(
SUMMA,
DTOPEZ,
TIP_OPEZ)
AS
SELECT SUM( R.summa ) SUM_OF_SUMMAOPEZ,
R.dtopez, "1"
FROM viewallproc2 R
GROUP BY R.dtopez
union
SELECT SUM( R.summa ) SUM_OF_SUMMAOPEZ,
R.dtopez, "2"
FROM viewallproD2 R
GROUP BY R.dtopez
union
SELECT SUM( R.summa ) SUM_OF_SUMMAOPEZ,
R.dtopez, "3"
FROM viewallproDA2 R
GROUP BY R.dtopez;

Потом уже через это view
SELECT SUM( SUMMAALL.SUMMA ) SUM_OF_SUMMA, SUMMAALL.DTOPEZ
FROM SUMMAALL
GROUP BY SUMMAALL.DTOPEZ
ORDER BY SUMMAALL.DTOPEZ DESC

Всем спасибо...



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.02.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.011 c
1-5028
Zhker
2003-01-23 21:52
2003.02.03
StringReplace - HELP


14-5222
Bad boy (c)
2003-01-15 22:03
2003.02.03
Такой вот странный текст я нашел...


1-4986
Johnny Split
2003-01-23 12:27
2003.02.03
Комбинации клавиш


3-4722
Ahmad K
2003-01-18 02:23
2003.02.03
Точный адрес...


3-4765
_landy
2003-01-16 12:45
2003.02.03
Sybase





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