Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Супер сложный запрос :) [D5, D6, IB5.x, IB6.x, dBase, FoxPro, Paradox]


Serg2002 ©   (2002-09-12 10:30:00) 

Есть две таблицы Т1 и Т2.

Первая таблица
TN – табельный номер
SUMA1 - сума начислений

Вторая таблица
TN – табельный номер
SUMA2 - сума удержаний

TN в каждой таблице не уникальный. Есть по нескольку одинаковых TN и соответственно сумма начислений или удержаний.
Та вот надо сделать запросик чтобы по каждому TN просуммировать начисления и удержания и еще найти разницу.
Что-то в роде.
select t1.tn, sum(t1.suma1) as nach, sum(t2.suma2) as uder, sum(t1.suma1)-sum(t2.suma2) as opl
from t1, t2
where t1.tn=t2.tn
group by t1.tn, t2.tn

Но результат получается неправильний. Или совсем не получается.
Использовать хранимые процедуры в IB нельзя. Запретили.


Serg2002   (2002-09-12 12:54:00) [1]

>Johnmen © (12.09.02 11:25)

Етот вариант пока полностью устраивает.
Спасибо!

SELECT A1.TN,
(SELECT SUM(A2.SUMA1) FROM T1 A2 WHERE A1.TN=A2.TN) F2,
(SELECT SUM(A3.SUMA2) FROM T2 A3 WHERE A1.TN=A3.TN) F3
FROM T1 A1
GROUP BY A1.TN



ЮЮ   (2002-09-12 11:43:00) [2]

Johnmen © (12.09.02 11:36) Понял :-)


Johnmen   (2002-09-12 11:36:00) [3]

>ЮЮ © (12.09.02 11:32)

Предлагаю подумать самому....:^)))


ЮЮ   (2002-09-12 11:32:00) [4]

>если для какого-то ТН есть удержания, но нет начислений, то этот ТН в выборку не попадет (естественно)...

Что же здесь естественного? И почему не попадет?


Johnmen   (2002-09-12 11:25:00) [5]

SELECT A1.TN,
(SELECT SUM(A2.SUMA1) FROM T1 A2 WHERE A1.TN=A2.TN) F2,
(SELECT SUM(A3.SUMA2) FROM T2 A3 WHERE A1.TN=A3.TN) F3
FROM T1 A1
GROUP BY A1.TN

F2-начисления, F3-удержания

Работает железно в IB...Но один нюанс - если для какого-то ТН есть удержания, но нет начислений, то этот ТН в выборку не попадет (естественно)...


ЮЮ   (2002-09-12 11:23:00) [6]

>ни в Paradox ни в IB
А говрят IB - Cepвер !!!
Тогда рез-ты подзапросов -> во временные таблицы.
А такое IB хотя бы поддерживает?
select * from
"nach.sql" nach
full join
"uder.sql" uder
on nachtn=udertn


elektro   (2002-09-12 11:22:00) [7]

>Использовать хранимые процедуры в IB нельзя. Запретили.
Это почему же ? С ней как раз все и получится.


Max Zyuzin   (2002-09-12 11:07:00) [8]

select * from (select * from mytable)
Такая конструкция не работает ни в Paradox ни в IB


ЮЮ   (2002-09-12 11:03:00) [9]

В дополнение, у меня синтаксис МS SQL.
В качестве пояснения. Начисления и удержания должны считаться в отдельных запросах, иначе неизбежно многогратное включение одного и того же начислени (удержания) в результирующую выборку


Max Zyuzin   (2002-09-12 11:00:00) [10]

>ЮЮ ©
Если я ничего не путаю.. то в Paradox-е селекты из селектов не работают.


Melov   (2002-09-12 10:59:00) [11]

Мне кажется надо так:

SELECT nach, uder, nach-uder
FROM
( select SUM(Summa1) as nach from T1 group by TN ) A
OUTER JOIN
( select SUM(Summa2) as uder from T2 group by TN ) B
ON A.TN = B.TN


ЮЮ   (2002-09-12 10:57:00) [12]

select * from
(select tn nachtn, Sum(suma1) snach from t1 group by tn) nach
full join
(select tn udertn, Sum(suma2) suder from t2 group by tn) uder
on nachtn=udertn


REA   (2002-09-12 10:52:00) [13]

Если значения некоторых полей NULL, то парадоксовый SQL будет игнорировать эти записи. Насчет IB не в курсе. Попробуй разбить на части и конкретезировать место ошибки.


Max Zyuzin   (2002-09-12 10:51:00) [14]

Ну первая же ошибка которую видно
group by t1.tn, t2.tn
У тебя поле t2.nt не присутствует в списке выбиваемых полей.. странно что оно вообще работало


Наверх

Титульная страница Поиск, карта сайта Написать письмо