Вниз
Скачать: CL | DM;

Помогите с запросами   Найти похожие ветки 

 
Константинов ©   (2004-11-25 01:43) [0]

Есть две таблицы DataIn и DataOut ( приход и расход ) в каждой одинаковые поля User и Summ ( полбзователь и сумма ).
Как написать запрос, который выводил бы имя юзера и суммы прихода и расхода для него. Пишу:

Query1.SQL.Add("

SELECT DataIn."User",
 Sum ( DataIn."Summ" ) AS Приход,
 Sum ( DataOut."Summ" ) AS Расход
FROM DataIn, DataOut
WHERE DataIn."User" = DataOut."User"
GROUP BY DataIn."User"");

И это работает не корректно. Как учесть пустые поля? и вывести для них сумму?

Заранее спасибо.


 
ЮЮ ©   (2004-11-25 03:34) [1]

>WHERE DataIn."User" = DataOut."User"

по этому условию для 2х записей в DataIn и 3х записей в DataOut получишь 6 в результирующеи наборе. А если в одной таблице нет записей для User-а, а в другой есть, то в результирубшем наборе их не будет :(

в БД помещаешь файл SummaryIn.sql c текстом:
SELECT User User, SUM(Summ) Summ FROM DataIn GROUP BY USER

и SummaryOut.sql
SELECT User User, SUM(Summ) Summ FROM DataOot GROUP BY USER

а в запросе пишешь
SELECT
 SummaryIn.User UserIn, SummaryOut.User UserOut,
 SummaryIn.Summ SumIn,  SummaryOut.Summ SumOut
FROM
 "SummaryIn.sql" i FULL JOIN "SummaryOut.sql" o ON i.User = o.User


 
Константинов ©   (2004-11-25 18:19) [2]

Спасибо! Все получилось! :) Только немного смущает наличие двух полей с именами пользователей. Сейчас попробую вынести список пользователей в отдельную таблицу и настроить Lookup


 
ЮЮ ©   (2004-11-26 03:18) [3]

>Только немного смущает наличие двух полей с именами пользователей

так одно или другое может оказаться NULL
Добавь Calculated поле, в котором показывай только одно - непустое

>Сейчас попробую вынести список пользователей в отдельную таблицу и настроить Lookup

Таблица пользователей - это хорошо, только нужен будет не Lookup, а мзмененный запрос

SELECT
 Users.*,  SummaryOut.User UserOut, SummaryOut.Summ SumOut
FROM
 USERS u
 LEFT JOIN "SummaryIn.sql" i ON u.Id = i.User
 LEFT JOIN "SummaryOut.sql" o ON u.Id = o.User
WHERE
 NOT (
   (i.User IS NULL) AND (o.User IS NULL)
 )



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

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.023 c
11-1082955456
Viman
2004-04-26 08:57
2004.12.26
bug в Thread


1-1102668128
Usat|k
2004-12-10 11:42
2004.12.26
Форма на все окно


14-1101073567
Piter
2004-11-22 00:46
2004.12.26
А каким хуком можно внедриться в консольное приложение?


14-1102020466
Marser
2004-12-02 23:47
2004.12.26
Хотелось бы узнать вашу точку зрения


14-1101800293
RDA
2004-11-30 10:38
2004.12.26
Реакция Бундестага на неопределенность в Украине




   Наверх