Собственно дело обстоит так.
Использую Firebird 2.1.
Есть таблицы:
Сотрудники:
Код: Выделить всё
worker (
id_worker integer not null,
f_name varchar(200),
s_name varchar(200),
th_name varchar(200),
h_phone varchar(200),
m_phone varchar(200),
address varchar(200),
b_day varchar(2),
b_month varchar(10),
b_year varchar(4),
id_state integer,
id_position integer,
bar_code integer,
isdel varchar(10),
whydel varchar(200)
);
Код: Выделить всё
client (
id_client integer not null,
bar_code integer,
id_worker integer,
id_state integer,
f_name varchar(200),
s_name varchar(200),
th_name varchar(200),
b_day varchar(2),
b_month varchar(10),
b_year varchar(4),
photo blob sub_type -1 segment size 16384,
address varchar(200),
hphone varchar(200),
mphone varchar(200),
email varchar(200),
clwork varchar(200),
other varchar(200),
id_info integer,
id_advertising integer,
isdel varchar(10),
whydel varchar(200)
);
Код: Выделить всё
cl_have_contract (
id_cl_have_contract integer not null,
id_client integer,
id_contract integer,
id_worker integer,
start_day varchar(2),
start_month varchar(10),
start_year varchar(4),
stop_day varchar(2),
stop_month varchar(10),
stop_year varchar(4),
freez_day varchar(2),
freez_month varchar(10),
freez_year varchar(4),
ifend varchar(10),
isdel varchar(10),
whydel varchar(200)
);
Пытаюсь сделать запрос чтоб получить примерно такую таблицу(отчёт по сотрудникам):
Вот мой SQL:________________________________________________________________________________________________
|Сотрудник(ФИО) | Количество проданных абонементов| Количество зарегистрированных клиентов |
|________________|____________________________________|_________________________________________|
Код: Выделить всё
select w.id_worker, w.s_name, w.f_name, w.th_name, count(hc.id_worker) as w_ct, count(c.id_worker) as w_c
from worker w, cl_have_contract hc, client c
where (w.id_worker = hc.id_worker) and (w.id_worker = c.id_worker)
group by w.id_worker, w.s_name, w.f_name, w.th_name
order by w.id_worker
1 Если какой то из сотрудников не добавлял, к примеру, контрактов, а клиентов вносил в БД то этот сотрудник в результате запроса не будет отображён
2 Почему то неправильно считается количество записей, к примеру, в таблице-связи контрактов всего 7 записей, а count сотрудника выдаёт 96
Помогите разобраться, пожалуйста с данными вопросами. Большое спасибо.