![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите составить запрос или подскажите что другое [D7, Firebird 2.0]
Megabyte © (2006-11-08 17:37:00)База: "ремонт телефонов".
Есть таблица Repair_progress, куда заносятся этапы ремонта телефона: переход на каждый этап - это новая запись.
Также у каждого ремонта(не этап, а ремонт конкретного телефона) есть уникальный идентификатор Repair_ID.
Есть поле, кот. показывает, на каком этапе находится телефон: Repair_State_ID.
Мне надо сделать запрос, в котором выдать, сколько cделал за сегодня конкретный человек. А также суммировать количество для группы(конкретная спеуиальность: техники-ремонтники, бригадиры, техник входного контроля).
Признак того, что телефон починен - это отгружен на склад: Repair_State_ID = 11.
user_link_group - связь специальности и логина пользователя.
right_group - специальности.
7000, 17000, 26000, 3000, 10000, 9000 - нужные мне специальности.
Я могу пока только сделать это в 2-х запросах:
Для каждого человека:
select G.group_title, L.login, count(distinct P.repair_progress_id)
from repair_progress P, repair_progress R, user_list L, right_group G, user_link_group Gl
where (P.responsible_personal_id = L.personal_id) and (P.is_delete > 0) and
(R.repair_state_id = 11) and (P.repair_id = R.repair_id) and
(cast(P.progress_timestamp as date) = current_date)
and (L.User_List_id = Gl.user_list_id) and (G.right_group_id = Gl.right_group_id)
and (L.user_list_id = any(
select Lg.user_list_id
from user_link_group Lg
where Lg.right_group_id in (7000, 17000, 26000, 3000, 10000, 9000)))
group by G.group_title, L.login
Для группы:
select G.group_title, count(distinct P.repair_progress_id)
from repair_progress P, repair_progress R, user_list L, right_group G,
user_link_group Gl
where (P.responsible_personal_id = L.personal_id) and (P.is_delete > 0) and
(R.repair_state_id = 11) and (P.repair_id = R.repair_id) and
(cast(P.progress_timestamp as date) = current_date)
and (L.User_List_id = Gl.user_list_id) and (G.right_group_id = Gl.right_group_id)
and (L.user_list_id = any(
select Lg.user_list_id
from user_link_group Lg
where Lg.right_group_id in (7000, 17000, 26000, 3000, 10000, 9000)))
group by G.group_title
Union'ом не могу возпользоваться, т.к. разное количество полей.
А хотелось бы в идеале получить такое, если это возможно вообще:
техник-ремонтник Иванов 6
техник-ремонтник Петров 8
техник-ремонтник Сидоров 12
26
бригадир Вова 20
бригадир Вася 30
50
и т.д.
Т.е. как бы двойная группировка: сначала по логину, а потом для группы логинов.
Megabyte (2006-11-09 09:18:00) [1]спасибо.
evvcom (2006-11-08 19:13:00) [2]Или для группы:
select G.group_title, null,count(distinct P.repair_progress_id)
и опять же union all
ANB (2006-11-08 18:12:00) [3]
> G.group_title, L.login
Склей эти 2 поля в одно и сделай union all