Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.03;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.026 c
7-5317
andrek
2002-11-20 12:03
2003.02.03
Как работает


1-4888
badaxe
2003-01-22 10:37
2003.02.03
Минимизация формы.


1-4971
Senator
2003-01-23 14:41
2003.02.03
Grid


14-5263
smok_er
2003-01-16 17:13
2003.02.03
Система автоматического апдейта


3-4746
BlackTiger
2003-01-15 20:56
2003.02.03
Значение ПОСЛЕДНЕЙ записи при SELECT е (см. тело!)