Форум: "Базы";
Текущий архив: 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