Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.10.2010, 15:08
Аватар для Dead_Gigabit
Dead_Gigabit Dead_Gigabit вне форума
Начинающий
 
Регистрация: 20.10.2009
Адрес: Там где холодно и сыро.... брр
Сообщения: 135
Версия Delphi: Delphi XE
Репутация: 10
Вопрос Сумма значений определенных записей

Всем здраствуйте, возникла проблемма...

Сразу скажу использую:
Firebird 1,5
Delphi 2010

Есть программа которая ведет количественно-сумовой учет материалов. Т.е сотрудник по программе делает приход\расход материала.
Необходимо сформировать отчет по расходу товара за определенный промежуток времени.
Ну например: сотрудник формирует отчет допустим с 30.09.2010 по 06.10.2010 (сегодняшнюю дату) это я сделал

Код:
DM.ADOArh.Active:=false;
  DM.ADOArh.SQL.Clear;
  DM.ADOArh.SQL.Add('SELECT *');
  DM.ADOArh.SQL.Add('FROM "SKLADARH"');
  DM.ADOArh.SQL.add('WHERE DATE_D  >= :D');
  DM.ADOArh.SQL.add('and DATE_D  <= :R');
  DM.ADOArh.SQL.add('and flag like ''' +'%'+'2'+'%''');
  DM.ADOArh.Parameters.ParamValues['D'] := formatdatetime('yyyy.mm.dd', (datetimepicker2.Date));
  DM.ADOArh.Parameters.ParamValues['R'] := formatdatetime('yyyy.mm.dd', (datetimepicker3.Date));
  DM.ADOArh.Active:=true;
mainform.Cursor:=crDefault;
dm.RHD.showreport;

Но тут появляется такая проблема при выборке из базы программа пробегается по базе ища записи по условию и выводит их на отчет, но как быть если за данный промежуток списали 2 раза один и тот же материал?
например:
04.10.2010 списали 15 кирпичей
05.10.2010 списали 10 кирпичей
соответственно программа выводит это с разной датой в две строки, а мне необходимо что бы программа выводила в одну строку с общим количеством
например:
кирпичи списано 25 штук?

Подскажите а то мозг уже лопается....
Ответить с цитированием
  #2  
Старый 06.10.2010, 15:42
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Код:
SELECT sum('Кол-во кирпичей') From (

(SELECT * FROM table
WHERE 
 DATE_D  >= '2010.05.01' AND 
 DATE_D  <= '2010.05.30' AND
 FLAG like ''' +'%'+'2'+'%''' ) as SomeName // это чтобы 
         SQL мог работать с этой "под"выборкой

) GROUP by Left(Date_D,8)

8 - это количество символов по дате слева. т.е. группировать будем по 2010.05.% - т.е. по месяцам (тут только точка последняя. с ней надо разобраться опытным путём)

Это сам SQL запрос. Вместо 2010.05.01 будут ваши параметры.
Я кстати бы записывал вот так:

Код:
 DM.ADOArh.SQL.add('WHERE DATE_D  >= '+formatdatetime('yyyy.mm.dd', (datetimepicker2.Date)));

Ибо кол-во переменных надо "уменьшать", дабы не заставлять программу больше думать и тратить время на резервирование памяти

Последний раз редактировалось Uniq!, 06.10.2010 в 15:45.
Ответить с цитированием
  #3  
Старый 06.10.2010, 16:50
Аватар для Dead_Gigabit
Dead_Gigabit Dead_Gigabit вне форума
Начинающий
 
Регистрация: 20.10.2009
Адрес: Там где холодно и сыро.... брр
Сообщения: 135
Версия Delphi: Delphi XE
Репутация: 10
Восклицание

Firebird ругается на запрос

SQL error code = -104.
Token unknown - line 1, column 26.

А если по мимо кирпичей есть другие материалы? в базе на данный момент 1117 разных наименований материалов.... как тогда быть?
Ответить с цитированием
  #4  
Старый 07.10.2010, 05:34
diagnoz diagnoz вне форума
Прохожий
 
Регистрация: 05.10.2010
Сообщения: 5
Репутация: 10
По умолчанию

У меня похожая проблема с D6 и dBase =( Нужно получить сумму полей тех записей, где остальные поля отвечают условию. На foxpro я бы обошелся двумя строчками:
set filter to <условие1>.and.<условие2>
sum(поле) to переменная
А тут голову сломал =(
Ответить с цитированием
  #5  
Старый 07.10.2010, 05:53
lmikle lmikle сейчас на форуме
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Если ты хочешь сохранить дату в выводе - то никак.
Если дата не нужна, то очент просто:
Код:
select name, sum(quantity)
from table
where sell_dt > :dfrom and sell_dt < :dto
group by name
Ответить с цитированием
  #6  
Старый 07.10.2010, 06:10
diagnoz diagnoz вне форума
Прохожий
 
Регистрация: 05.10.2010
Сообщения: 5
Репутация: 10
По умолчанию

А если не нужно выводить результат в таблицу а просто присвоить значению результат sum(quantity) ?
Ответить с цитированием
  #7  
Старый 07.10.2010, 10:13
diagnoz diagnoz вне форума
Прохожий
 
Регистрация: 05.10.2010
Сообщения: 5
Репутация: 10
По умолчанию

Спасибо разобрался.
Ответить с цитированием
  #8  
Старый 07.10.2010, 12:55
Аватар для Dead_Gigabit
Dead_Gigabit Dead_Gigabit вне форума
Начинающий
 
Регистрация: 20.10.2009
Адрес: Там где холодно и сыро.... брр
Сообщения: 135
Версия Delphi: Delphi XE
Репутация: 10
По умолчанию

Все спасибо работает

Код:
DM.ARH.SQL.Clear;
DM.ARH.SQL.Add('select SKLADARH.NAME, sum(SUMMA), sum(KOL), SKLADARH.SHET, SKLADARH.PRICE');
DM.ARH.SQL.add('from "SKLADARH"');
DM.ARH.SQL.add('WHERE DATE_D  >= :D');
DM.ARH.SQL.add('and DATE_D  <= :R');
DM.ARH.SQL.add('and FLAG like ''' +'%'+'2'+'%''');
DM.ARH.SQL.add('group by NAME,SHET,PRICE');
DM.ARH.Parameters.ParamValues['D'] := formatdatetime('yyyy.mm.dd', (datetimepicker2.Date));
DM.ARH.Parameters.ParamValues['R'] := formatdatetime('yyyy.mm.dd', (datetimepicker3.Date));
 DM.ARH.Active:=true;
Ответить с цитированием
  #9  
Старый 09.10.2010, 13:22
Аватар для Dead_Gigabit
Dead_Gigabit Dead_Gigabit вне форума
Начинающий
 
Регистрация: 20.10.2009
Адрес: Там где холодно и сыро.... брр
Сообщения: 135
Версия Delphi: Delphi XE
Репутация: 10
Вопрос Дубль 2

Ещё раз здраствуйте, не стал создовать новый топик так как вопрос проктически идентичный, только на этот раз посложней:
БД и сис. программирования остались прежними.
Теперь необходимо из 2х таблиц (одной БД) вытащить сумму двух одинаковых полей (KOL и SUMMA) оба столбца есть в 1 и 2 таблице и сгрупировать по названию... (что бы небыло повторяющихся строк)

Мои эксперементы с SUM (поле) не принисли успехов, делфи выдаёт кокую-то ахинею.... (якобы у меня на складе товара в 7 раз больше чем в БД)

Потскажите плиз как это реализовать...
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:21.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter