Два запроса через 1 Query

 
0
 
Delphi, Kylix & Pascal
ava
Anakin | 30.09.2013, 20:15
Добрый Вечер.
Уже 2 дня носилую свой мозг и не могу придумать как это сделать.
Опишу суть проблемы.
Есть БД на Основе MySQL в которой хранятса договора, там поля такого типа:
1)Номер Договора
2)Дата Договора
3)Ф.И.О.
4)Сумма
5)Аванс
6)Остаток
7)Тип Валюты
Делаю форму для поиска и просмотра должников за определённый период:

Код ниже для создания фильтрации за определённый период:

q_calc.SQL.Clear;
q_calc.sql.text:='Select * From t_main Where (f_data>:D1) and (f_data<:D2)';
q_calc.params.parseSql(q_calc.sql.text, true);
q_calc.params.parambyname('d1').value:=edt_date_1.Date;
q_calc.params.parambyname('d2').value:=edt_date_2.Date;


Код ниже считает сколько должны по выбранному типу валюты.

frmMain.q_euro.Active := False;
  frmMain.q_euro.SQL.Clear;
  frmMain.q_euro.SQL.Add('select sum(f_ostatok) as suma_euro from t_main where f_valuta=''Евро''');
  frmMain.q_euro.Active := True;
  frmSearch.StatusBar.Panels[1].Text:='Долгов: '+IntToStr(frmMain.q_euro.FieldValues['suma_euro'])+' Евро';


Но у меня не получаетса сделать так что бы оно считало должников именно за выбраный период.
Одним словом как сделать так что бы оно посчитало допустим с 01.01.2012 по 01.01.2012 с типом валюты ЕВРО.
Ребята подскажите как это организовать.
За рание Спасибо.
Comments (4)
ava
Akella | 30.09.2013, 21:03 #
Цитата (Anakin @  30.9.2013,  19:15 findReferencedText)
(f_data>:D1) and (f_data<:D2)';


может здесь нужно >= и <= ?

added later:
зачем ты выполняешь
Цитата (Anakin @  30.9.2013,  19:15 findReferencedText)
q_calc.SQL.Clear;


если сразу после этого полностью заменяешь текст
Цитата (Anakin @  30.9.2013,  19:15 findReferencedText)
q_calc.sql.text:=


???

added later:
В таблице поле "f_data" какого типа?
ava
DYUMON | 01.10.2013, 13:02 #
может быть так ?

frmMain.q_euro.SQL.Clear;
  frmMain.q_euro.SQL.Add('select sum(f_ostatok) as suma_euro from t_main where f_valuta=:vl and
f_date BETWEEN :d1 AND :d2');
   frmMain.q_euro.paramsbyname('vl').asstring:='Евро';
   frmMain.q_euro.paramsbyname('d1').asdate:= edt_date_1.Date;
   frmMain.q_euro.paramsbyname('d2').asdate:= edt_date_2.Date;
frmMain.q_euro.open;
  frmSearch.StatusBar.Panels[1].Text:='Долгов: '+IntToStr(frmMain.q_euro.FieldValues['suma_euro'])+' Евро';

ava
Vas | 01.10.2013, 19:48 #
Попробуй выполнить такой запрос

select sum(f_ostatok) as suma_euro, num_dogovor,  from t_main
where f_valuta=:valuta and f_data between :dt_beg and dt_end
group by num_dogovor


а потом можно еще попробовать усложнить

select t_main.num_dogovor, t_main.date_dogovor (и т.д.), t_summa.suma from t_main,
(select sum(f_ostatok) as suma_euro, num_dogovor,  from t_main
where f_valuta=:valuta and f_data between :dt_beg and :dt_end
group by num_dogovor)  t_summa
where t_main.num_dogovor = t_summa.num_dogovor

ava
Anakin | 02.10.2013, 12:09 #
Цитата (Vas @ 1.10.2013,  19:48)
Попробуй выполнить такой запрос



select sum(f_ostatok) as suma_euro, num_dogovor,  from t_main 

where f_valuta=:valuta and f_data between :dt_beg and dt_end

group by num_dogovor





а потом можно еще попробовать усложнить



select t_main.num_dogovor, t_main.date_dogovor (и т.д.), t_summa.suma from t_main, 

(select sum(f_ostatok) as suma_euro, num_dogovor,  from t_main 

where f_valuta=:valuta and f_data between :dt_beg and :dt_end

group by num_dogovor)  t_summa

where t_main.num_dogovor = t_summa.num_dogovor


Ого клёвый запрос ))
Шас буду вникакть как оно работает а потом внедрять ))
Спасибо всем ))
За отклик думаю этой помощи мне хватит что бы решить проблему.
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
ava  Akella ava  Vas   Anakin ava  DYUMON
advanced
Submit