Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.28;
Скачать: CL | DM;

Вниз

Помогите составить запрос или подскажите что другое   Найти похожие ветки 

 
Megabyte ©   (2006-11-08 17:37) [0]

База: "ремонт телефонов".
Есть таблица 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

и т.д.
Т.е. как бы двойная группировка: сначала по логину, а потом для группы логинов.


 
ANB ©   (2006-11-08 18:12) [1]


> G.group_title, L.login

Склей эти 2 поля в одно и сделай union all


 
evvcom ©   (2006-11-08 19:13) [2]

Или для группы:
select G.group_title, null, count(distinct P.repair_progress_id)
и опять же union all


 
Megabyte ©   (2006-11-09 09:18) [3]

спасибо.



Страницы: 1 вся ветка

Текущий архив: 2007.01.28;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.047 c
3-1162927118
Defort
2006-11-07 22:18
2007.01.28
Вопросы по базам данных


9-1143032218
Yegorchic
2006-03-22 15:56
2007.01.28
FreeForm и GLScene.SaveToFile


15-1168275480
Petr V. Abramov
2007-01-08 19:58
2007.01.28
а существует ли что-то типа DBTreeView


2-1167928170
Vovan #2
2007-01-04 19:29
2007.01.28
Чем отличаются GlobalAlloc от VirtualAlloc? И про PChar.


15-1168264739
brrrr
2007-01-08 16:58
2007.01.28
Нас всех прослушивают! Ужас! Мы беззащитны :(