![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Уважаемые программисты!
Нужна ваша помощь! У меня возникла проблема, вот какого плана. Мне необходимо организовать подчет суммы поле с условиями. Имеется БД в ней таблицы stud и propuski, руководитель потребовал сделать своего рода отчет по пропускам группы, он выглядит следующим образом: в гриде должна отображается табличка такого вида: |фамилия|кол-во пропусков по уважительной причине|кол-во пропусков по не уважительной причине| Необходимо вывести сумму пропущенных часов за заданный период по каждому студенту из выбранной группы. Как это реализовать программно? Использую ADO-Access. Кто с таким сталкивался или хотябы примерно знает как это сделать, прошу помощи!! |
|
#2
|
|||
|
|||
|
Перефразирую проблему, необходимо посчитать сумму пропущенных часов группы в частности по каждому студенту в отдельности, уважительных и не уважительных за выбранный период и вывести в грид с последующим экспортом в Excel(ну с этим у меня проблем нет) в гриде фамилии студентов выбранной группы, а напротив в ячейках сумма пропусков по двум критериям (ув.) и (неув.), я так думаю надо организовать цикл, а как его представать в работоспособном коде я не могу, у меня не получается…при попытке написания выводятся все записи с фамилиями студентов за заданный период и происходит подсчет по всем фамилиям а не по одной как необходимо...
Кто может помочь?? Очень надо скоро сдача а руководитель принципиален и не идёт на уступки ![]() |
|
#3
|
|||
|
|||
|
Цитата:
Запрос с группировкой: Код:
select s.fio, sum(p.uv) as uvaj, sum(p.nuv) as neuvaj from stud s, propuski p where s.kod = p.kod group by s.fio И выводиш его в грид Используешь ADOQuery Лучшще кидани исходник проги... Я тебе там вставлю Или сам понял? И вообще учи SQL в жизни пригождится ![]() |
|
#4
|
|||
|
|||
|
Могу предложить один вариант.
С помощью запроса получить таблицу (фамилия, вид пропуска, кол-во пропусков). А потом уже этот запрос обрабатывать и приводить к тому виду что тебе надо через цикл. Код:
With adoQuery1 do begin
Close;
SQL.Clear;
SQL.Add('SELECT familia,vid_propuska,COUNT(vid_propuska) from propuski, stud');
SQL.Add('WHERE stud.code_s=propuski.code_s');
SQL.Add('group by familia,vid_propuska');
Open;
end; |
|
#5
|
|||
|
|||
|
Цитата:
voron_paa Хм... понять то понел, да не совсем А можно пояснить для особо "одарённых??" Цитата:
Да таблица получается, ток я не совсем понимаю какого вида цикл надо использывать... Напомню вид нужной таблици в гриде: |Фамилия|Сумма часов пропущенных по ув. причине|Сумма часов пропущенных по неув. причине| Вот исходник, по нему наверно проще будет объяснить, показать. |
|
#6
|
|||
|
|||
|
Я вначале неправильно понял, там считал кол-во пропусков, а не кол-во часов.
|
|
#7
|
|||
|
|||
|
Цитата:
MegaPiha Благодарен тебе!! Но, мне необходимо подсчет не по всем студентам а по студентам выбранной группы и в добавок к этому и за определенный период. Пытаюсь сам поправить запрос но постоянно ругается, может я что-то не так делаю, первый раз вижу такую ошибку?? ![]() "Попытка выполнить запрос, который не включает указанное вложение 'Gruppa' как части синтаксической функции или группы " Код:
With adoQuery3 do begin
Close;
SQL.Clear;
SQL.Add('SELECT stud.familia,propuski.vid_propuska,sum(kol_vo_chas) as cnt,stud.Gruppa,propuski.data from propuski, stud');
SQL.Add('WHERE stud.code_s=propuski.code_s');
SQL.Add('AND s.Gruppa = :g');
SQL.Add('AND p.data BETWEEN :dn AND :dk ');
SQL.Add('group by familia,vid_propuska');
Parameters.ParseSQL(SQL.Text,true);
Parameters.ParamByName('g').Value:= ComboBox2.Text;
Parameters.ParamByName('dn').Value:= DateTimePicker1.Date;
Parameters.ParamByName('dk').Value:= DateTimePicker2.Date;
Open;Мне жутко стыдно просить, но всё же, помоги, очень нужно!! Пажалуйста! |