|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Сумма значений определенных записей
Всем здраствуйте, возникла проблемма...
Сразу скажу использую: 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
|
||||
|
||||
Код:
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
|
||||
|
||||
Firebird ругается на запрос
SQL error code = -104. Token unknown - line 1, column 26. А если по мимо кирпичей есть другие материалы? в базе на данный момент 1117 разных наименований материалов.... как тогда быть? |
#4
|
|||
|
|||
У меня похожая проблема с D6 и dBase =( Нужно получить сумму полей тех записей, где остальные поля отвечают условию. На foxpro я бы обошелся двумя строчками:
set filter to <условие1>.and.<условие2> sum(поле) to переменная А тут голову сломал =( |
#5
|
|||
|
|||
Если ты хочешь сохранить дату в выводе - то никак.
Если дата не нужна, то очент просто: Код:
select name, sum(quantity) from table where sell_dt > :dfrom and sell_dt < :dto group by name |
#6
|
|||
|
|||
А если не нужно выводить результат в таблицу а просто присвоить значению результат sum(quantity) ?
|
#7
|
|||
|
|||
Спасибо разобрался.
|
#8
|
||||
|
||||
Все спасибо работает
Код:
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
|
||||
|
||||
Дубль 2
Ещё раз здраствуйте, не стал создовать новый топик так как вопрос проктически идентичный, только на этот раз посложней:
БД и сис. программирования остались прежними. Теперь необходимо из 2х таблиц (одной БД) вытащить сумму двух одинаковых полей (KOL и SUMMA) оба столбца есть в 1 и 2 таблице и сгрупировать по названию... (что бы небыло повторяющихся строк) Мои эксперементы с SUM (поле) не принисли успехов, делфи выдаёт кокую-то ахинею.... (якобы у меня на складе товара в 7 раз больше чем в БД) Потскажите плиз как это реализовать... |