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

Вниз

Супер сложный запрос :)   Найти похожие ветки 

 
Serg2002   (2002-09-12 10:30) [0]

Есть две таблицы Т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 нельзя. Запретили.


 
Max Zyuzin ©   (2002-09-12 10:51) [1]

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


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

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


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

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



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

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

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


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

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


 
ЮЮ ©   (2002-09-12 11:03) [6]

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


 
Max Zyuzin ©   (2002-09-12 11:07) [7]

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


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

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


 
ЮЮ ©   (2002-09-12 11:23) [9]

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


 
Johnmen ©   (2002-09-12 11:25) [10]

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:32) [11]

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

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


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

>ЮЮ © (12.09.02 11:32)

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


 
ЮЮ ©   (2002-09-12 11:43) [13]

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


 
Serg2002   (2002-09-12 12:54) [14]

>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





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

Текущий архив: 2002.10.03;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
8-8066
Good Man
2002-06-04 21:49
2002.10.03
Проблемы с изменением разрешения экрана (Delphi 5)


1-7957
pvasya
2002-09-24 10:18
2002.10.03
падеж Delphi 6


14-8159
VictorT
2002-09-09 16:01
2002.10.03
Лотерея


4-8223
oduvan
2002-08-16 18:38
2002.10.03
Как лучшее всего удалить папку с файлами в корзину?


6-8083
SFlash
2002-08-01 12:55
2002.10.03
Динамически создаваемые сокеты. Как обрабатывать их события?