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

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

Помогите с запросами [Paradox]


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

Есть две таблицы 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-26 03:18:00) [1]

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

так одно или другое может оказаться 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)
 )


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

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


ЮЮ   (2004-11-25 03:34:00) [3]

>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


Наверх

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