![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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х таблиц (одной БД) вытащить сумму двух одинаковых полей (KOL и SUMMA) оба столбца есть в 1 и 2 таблице и сгрупировать по названию... (что бы небыло повторяющихся строк) Мои эксперементы с SUM (поле) не принисли успехов, делфи выдаёт кокую-то ахинею.... (якобы у меня на складе товара в 7 раз больше чем в БД) Потскажите плиз как это реализовать... |