Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Два запроса через 1 Query, Фильтрация + Сумирование 
:(
    Опции темы
Anakin
  Дата 30.9.2013, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 25.9.2006

Репутация: нет
Всего: нет



Добрый Вечер.
Уже 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 с типом валюты ЕВРО.
Ребята подскажите как это организовать.
За рание Спасибо.
PM MAIL   Вверх
Akella
  Дата 30.9.2013, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(Anakin @  30.9.2013,  19:15 Найти цитируемый пост)
(f_data>:D1) and (f_data<:D2)';


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

Добавлено через 1 минуту и 13 секунд
зачем ты выполняешь 
Цитата(Anakin @  30.9.2013,  19:15 Найти цитируемый пост)
q_calc.SQL.Clear;


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


???

Добавлено через 2 минуты и 21 секунду
В таблице поле "f_data" какого типа?

Добавлено через 2 минуты и 59 секунд
Цитата(Anakin @  30.9.2013,  19:15 Найти цитируемый пост)
edt_date_1

Советую почитать про именование объектов, переменных и т.д.

Добавлено через 4 минуты и 22 секунды
Не понимаю, какая связь между q_calc и q_euro.
Неизвестно, открываешь ты q_calc или нет.

Добавлено через 8 минут и 8 секунд
Цитата(Anakin @  30.9.2013,  19:15 Найти цитируемый пост)
Но у меня не получаетса сделать так что бы оно считало должников именно за выбраный период.

Наверное нужно применить группировку в запросе, т.е. что-то типа
Код


select sum(f_ostatok) as suma_euro, id_user  from t_main

where f_valuta = :valuta
and f_data >= :dt_min
and f_data <= :dt_max

group by 1


//скобки не нужны
//код писал на коленке
PM MAIL   Вверх
DYUMON
Дата 1.10.2013, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 321
Регистрация: 17.6.2006
Где: Новосибирск

Репутация: 2
Всего: 3



может быть так ?
Код

 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'])+' Евро';

не совсем погнятно в каком именно виде необходимо вывести данные если по списку. пиши более точно.

Это сообщение отредактировал(а) DYUMON - 1.10.2013, 13:04


--------------------
Всех программистов надо посадить на целероны, что бы впредь головой думали что пишут.
user posted image
PM MAIL ICQ Skype   Вверх
Vas
Дата 1.10.2013, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Попробуй выполнить такой запрос
Код

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




--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Anakin
Дата 2.10.2013, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 25.9.2006

Репутация: нет
Всего: нет



Цитата(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

Ого клёвый запрос ))
Шас буду вникакть как оно работает а потом внедрять ))
Спасибо всем ))
За отклик думаю этой помощи мне хватит что бы решить проблему.

Это сообщение отредактировал(а) Anakin - 2.10.2013, 12:09
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0473 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.