Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2008, 16:34   #1
Blackmore
 
Регистрация: 04.05.2008
Сообщений: 8
По умолчанию Помогите с запросом

Есть поля Date, Cost и логическое Incom, по котрому определяется, является данная запись доходной или расходной. Как в DBGride сделать так, чтобы в первом столбце выводились даты, во втором - сумма доходов по этим данным, а в третьем - расходов (причём если, например, на какую-то дату есть доходные записи, а расходных - нет, то в третьем столбце в соответствующей строке должно выводиться 0,00р.).
Blackmore вне форума Ответить с цитированием
Старый 05.05.2008, 02:18   #2
Pitbull
детский тренер
Форумчанин
 
Аватар для Pitbull
 
Регистрация: 08.06.2007
Сообщений: 532
Хорошо

1.если у вас MSSQL,например, то можно процедуру создать,в которой курсором прогонять все записи... и по условию формировать запрос....

2.Можно временную таблицу создать , в которую копировать записи...:

Код:
insert into Table2(дата,доход,расход) select (дата, 0, расход) from TABLE1 where Incom=false
union
insert into Table2(дата,доход,расход) select (дата, доход, 0)  from Table1 where Incom=true
а потом в запросе,который будет в ГРИД выводить по дате отсортировать таблицу.... (order by дата)
Я злой и страФный серррый воФк, и в пАрАсятах знаю толк - ppp ppp pp p pp pp
Pitbull вне форума Ответить с цитированием
Старый 06.05.2008, 14:00   #3
Domovoy
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 254
По умолчанию

Код:
create table #tmp( Date datetime, Cost float ,Incom bit)

insert into #tmp values('01.01.2008',100,1);
insert into #tmp values('01.01.2008',50,0);
insert into #tmp values('02.01.2008',75,1);
insert into #tmp values('02.01.2008',100,0);
insert into #tmp values('03.01.2008',100,1);
insert into #tmp values('03.01.2008',200,0);

--накопительный вариант
select distinct date,
(select sum(case when incom=1 then cost else 0 end) from #tmp where date<=tab.date) as prihod,
(select sum(case when incom=0 then cost else 0 end) from #tmp where date<=tab.date) as uhod
from #tmp tab

--по дневный вариант
select date,
sum(case when incom=1 then cost else 0 end) as prihod,
sum(case when incom=0 then cost else 0 end) as uhod
from #tmp
group by date
order by date
Domovoy вне форума Ответить с цитированием
Старый 07.05.2008, 01:18   #4
Blackmore
 
Регистрация: 04.05.2008
Сообщений: 8
По умолчанию

Всем большое спасибо за помощь. Сделал через текстовый файл:
Код:
Select Date, sum(Cost) as Prihod, 0 as Uhod
From Data
Where Incom=true
Group by Date
Union
Select Date, 0 as Prihod, sum(Summa) as Uhod
From Data
Where Incom=false
Group by Date
Код:
 
Select Date, sum(Prihod), sum(Uhod)
From "SUM.SQL"
Group by Date
Order by Date desc
Blackmore вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с запросом Viper666 Microsoft Office Access 2 14.05.2008 22:35
Помогите с запросом Айвенго Microsoft Office Access 3 08.05.2008 09:07
SQL. Помогите с запросом. fluxion БД в Delphi 2 27.12.2007 08:01
Помогите с SQL запросом. Monoflextor БД в Delphi 12 29.04.2007 16:53
помогите с запросом 9-11 БД в Delphi 4 20.11.2006 10:04