Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2010, 19:13   #1
Регинка-малинка
Пользователь
 
Регистрация: 21.09.2010
Сообщений: 33
По умолчанию Повторяющиеся записи, ClientDataSet

У меня немножко похожая тема, на тему повторяющихся записей. бд access. вот такие данные:

Дата | ФИО |Должность|
13.11.10 Иванов Техник
14.11.10 Петров механик
15.11.10 Иванов техник
16.11.10 Сидоров водит.
17.11.10 Иванов техник

мне нужно подсчитать общее кол-во рабочих за 4й квартал (здесь ноябрь), как видно по таблице их 3е, а по моему коду показывает 5.
отрывок кода примерно такой, использую adoquery:

adoquery.SQL.TEXT:='select date,fio,dolzhn, ' +
'(select count(fio) from zapr(мое прдестав.) where '+kvartal+') as kol_fio ' + // select(distinct fio) не катит
' from zapros ' +
' order by fio';

'+kvartal+' -в коде выше написан небольшой запрос для даты (кварталов).

Переменную kol_fio ставлю в fastreport. Если бы не было выборки даты все было бы гораздо легче, но так как поле дата связано с фамилиями, ФИО "Иванов" становится как-бы уникальным.... как правильно написать запрос?? помогите пожалуйста!!!!!!!!!

и еще как правильно записать для поля num(номер документа) процедуру ClientDataSetnumGetText, чтобы grideh объединил все фамилии по документу, например так:

Документ| Дата | ФИО |Должность|
123..........13.11.10 Иванов Техник
...............14.11.10 Петров механик
124..........15.11.10 Иванов техник
...............16.11.10 Сидоров водит.
...............17.11.10 Иванов техник

сами данные в данный момент записаны так:

Документ| Дата | ФИО |Должность|
123..........13.11.10 Иванов Техник
123..........14.11.10 Петров механик
124..........15.11.10 Иванов техник
124..........16.11.10 Сидоров водит.
124..........17.11.10 Иванов техник

У нас принято оформлять код специальным тэгом - при помощи кнопочки "#".
Только...
И не значком #.
И не РНР-кодом.
И не значком цитаты.
И не собственными "ручками".
Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе...
Модератор

Последний раз редактировалось mihali4; 18.11.2010 в 19:37.
Регинка-малинка вне форума Ответить с цитированием
Старый 18.11.2010, 20:06   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
подсчитать общее кол-во рабочих за 4й квартал (здесь ноябрь)
Код:
select month(date),count(fio) from Таблица group by month(date)
Сойдет?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.11.2010, 20:26   #3
Регинка-малинка
Пользователь
 
Регистрация: 21.09.2010
Сообщений: 33
По умолчанию

нет, мне же не только 4 квартал, а все...хотя дело даже не в этом...я в сам select этот date положить не могу...в combobox у меня выбиратеся год (от 2000 до 2010 - любой) а в radiogroup сами кварталы 1,2,3,4 и год полностью... как уже говорила использую adoquery, он у меня соедржит сам запрос и подзапросы.
Код:
adoquery.sql.text:='select num,fio,date1  разные поля' + 
'(select count(fio) from zapros3 where '+zapr_kv+') as fio_kol '+
'(select и    так            далееееееее '+
' from zapr where '+zapr_kv+' ' +
'order by num'; (кстати почему когда вместо order вставляю group by ругается на дату)
так вот, условие '+zapr_kv+' у меня обьявляется в коде заранее примерно так:
Код:
kvartal1:='01.'+comboboxitems[c2] // к месяцу присваивается выбранный в компоненте год;
//и так далее, kvartalov несколько, 
zapr_kv:=' where date1 like '+kvartal1+ or date1 like '+kvartal2+' и так далее''
надеюсь теперь понятнее получилось, старалась правильно объяснить
Регинка-малинка вне форума Ответить с цитированием
Старый 18.11.2010, 20:45   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
надеюсь теперь понятнее получилось
Если честно то не очень...
Цитата:
мне же не только 4 квартал
Так я как бы в своем примере не ограничил кварталы...
Цитата:
я в сам select этот date положить не могу
Возможно формат не совпадает. Параметризируй
Код:
with adoquery do begin
 SQL.TEXT:=...(select count(fio) from zapros3 where :zk)...
 Parameters.ParamByName('zk').Value:=StrToDate('01.'+comboboxitems[c2] // к месяцу присваивается выбранный в компоненте год;
)
...
Только ИХМО все это ерунда... я бы писал именно так как я написал выше - разбивка на месяцы и подсчет количества.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.11.2010, 20:53   #5
Регинка-малинка
Пользователь
 
Регистрация: 21.09.2010
Сообщений: 33
По умолчанию

ой я самое важное забыла написать, мне то кол-во неповторяющися полей fio нужно подсчитать...я пробовала через отдельное представление делать просто
Код:
 select distinct fio from RP
и потом его в sql.khp подставляла, но так как date1 я здесь не указала, в отчете он тупо показывает общее кол-во неповтяряющихся фамилий....их 435 шт.
а если прописывать через date1, то уже уникальность теряет свой смысл и если иванов записан как 14.11.2010 так и допустим 15.11.2010 то запрос подсчитает их как 2 разных человека....вот в чем проблема
Регинка-малинка вне форума Ответить с цитированием
Старый 19.11.2010, 09:43   #6
BeJIuKuu_Hexo4yxa
Пользователь
 
Регистрация: 13.10.2010
Сообщений: 96
По умолчанию

Код:
select distinct to_char(date,'mm.yyyy') as only_month, fio from RP
или
Код:
select to_char(date,'mm.yyyy') as only_month, fio 
from RP
group by to_char(date,'mm.yyyy'), fio
group by предпочтительнее с точки зрения оптимизации
to_char(date,'mm.yyyy') - это оракловый синтаксис. Как в Аксессе отрезать месяц, не помню.
Суть в том, что для группировки тебе нужно использовать не полную дату (с числом), а только месяц (или квартал).
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. (Стив Макконнелл)
BeJIuKuu_Hexo4yxa вне форума Ответить с цитированием
Старый 19.11.2010, 10:06   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Регинка-малинка
Я что пишу по воздуху? Меня что никто не слышит?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.11.2010, 18:54   #8
Регинка-малинка
Пользователь
 
Регистрация: 21.09.2010
Сообщений: 33
По умолчанию

короче меня никто не понял или я вас, у меня нет проблем с кварталами. у меня все работало до этого, просто не считает кол-во фамилий по дате не в явном смысле, если например я пишу в конце запроса
Код:
select num date1 fio
другие подзапросы
from RP
Group by num
то он выдает ошибку, чтобы поле date1 точно не помню конечно, ну что она типа не является статистической ф-ей вроде.

а если напишу
Код:
select num date1 fio 
другие подзапросы
from RP
Group by date1
то пишет что уже поле num не подходит
Регинка-малинка вне форума Ответить с цитированием
Старый 20.11.2010, 00:28   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я не понимаю, что Вы хотите и что Вам надо (соррии)

Цитата:
то он выдает ошибку, чтобы поле date1 точно не помню конечно, ну что она типа не является статистической ф-ей вроде.
а если напишу
....
то пишет что уже поле num не подходит
Ну, формально могу ответить..
смотрите, если Вы указываете группировку по полю (по полям)
то в SELECT вы можете указать только это поле (поля), которые участвуют в группировке, либо агрегатные функции (агрегатные - это функции, которые применяются к набору данных, это, например, MIN() MAX() AVG() SUM() COUNT() и т.д.)
т.е. если Вам нужно в select иметь и поле NUM и поле DATE1 - то укажите эти поля оба в группировке:
.... GROUP BY NUM, DATE1
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Повторяющиеся записи, выборка по дате Регинка-малинка Помощь студентам 2 17.11.2010 20:37
Повторяющиеся записи в DBLookupComboBox sl963 БД в Delphi 4 30.05.2010 07:40
повторяющиеся записи hinku БД в Delphi 3 18.08.2009 17:25
Повторяющиеся записи DBGrid Crookers БД в Delphi 2 21.05.2008 13:26
Выбрать повторяющиеся записи Andrei SQL, базы данных 2 13.09.2007 14:28