2014-01-27 5 views
0

Привет, моя проблема в том, что это может быть полезно для других людей. У меня есть заказ с экземпляром экземпляра, у этого заказа есть несколько билетов с различным номером ticket_number как sr_num, но все они имеют одинаковый идентификатор экземпляра службы. Билет может быть на разных этапах, так как открытый закрыт или находится в процессе, Предположим, что есть 4 билета заказа и есть много заказов с 4 или менее билетами Я нахожу все открытые билеты одного типа билетов, получаю его service_instance_id и соответствующие он, найдите другие билеты, которые открыты для этого заказа.sql query help pivot

Используя следующий запрос, я могу найти его, но все это происходит ниже друг друга, я хочу, чтобы он был определен для конкретного заказа, и вся информация о 4 билетах должна быть в одной строке, если конкретный билет закрыт для этого заказа, оно не должно отображаться

select a.sr_num Acceptance_TT, a.act_open_dt Acceptance_Date, e.login Acceptance_Owner , c.sr_area, c.sr_num, c.act_open_dt, d.login, case when c.sr_stat_id in ('Closed','Cancelled') then '-' else c.sr_stat_id end TT_Status 
    from 
    siebel.s_srv_req a -- GOC TT 
    ,siebel.s_order_item b -- ServiceInstanceID 
    ,siebel.s_srv_req c -- Project Management 
    ,siebel.s_user d -- Owner 
    ,siebel.s_user e -- GOC Owner 
    where 
    a.sr_area = 'GOC Acceptance' and a.sr_num='20130601-3-28' 
    and a.sr_stat_id in ('Open - GOC') 
    and a.x_service_instance_id = b.row_id 
    and c.x_service_instance_id = b.row_id 
    and c.sr_area = 'Project Management' 
    --and c.sr_stat_id not in ('Closed','Cancelled') 
    and c.owner_emp_id = d.row_id 
    and a.owner_emp_id = e.row_id PM 5:39 
    UNION all 
    select a.sr_num Acceptance_TT, a.act_open_dt Acceptance_Date, e.login Acceptance_Owner, c.sr_area, c.sr_num, c.act_open_dt, d.login, case when c.sr_stat_id in ('Closed','Cancelled') then '-' else c.sr_stat_id end TT_Status 
    from 
    siebel.s_srv_req a -- GOC TT 
    ,siebel.s_order_item b -- ServiceInstanceID 
    ,siebel.s_srv_req c -- Provisioning 
    ,siebel.s_user d -- Owner 
    ,siebel.s_user e -- GOC Owner 
    where 
    a.sr_area = 'GOC Acceptance' and a.sr_num='20130601-3-28' 
    and a.sr_stat_id in ('Open - GOC') 
    and a.x_service_instance_id = b.row_id 
    and c.x_service_instance_id = b.row_id 
    and c.sr_area = 'Provisioning' 
    --and c.sr_stat_id not in ('Closed','Cancelled') 
    and c.owner_emp_id = d.row_id 
    and a.owner_emp_id = e.row_id PM 5:39 
    UNION all 
    select a.sr_num Acceptance_TT, a.act_open_dt Acceptance_Date, e.login Acceptance_Owner, c.sr_area, c.sr_num, c.act_open_dt, d.login, case when c.sr_stat_id in ('Closed','Cancelled') then '-' else c.sr_stat_id end TT_Status 
    from 
    siebel.s_srv_req a -- GOC TT 
    ,siebel.s_order_item b -- ServiceInstanceID 
    ,siebel.s_srv_req c -- CE Implementation 
    ,siebel.s_user d -- Owner 
    ,siebel.s_user e -- GOC Owner 
    where 
    a.sr_area = 'GOC Acceptance' and a.sr_num='20130601-3-28' 
    and a.sr_stat_id in ('Open - GOC') 
    and a.x_service_instance_id = b.row_id 
    and c.x_service_instance_id = b.row_id 
    and c.sr_area = 'CE Implementation' 
    --and c.sr_stat_id not in ('Closed','Cancelled') 
    and c.owner_emp_id = d.row_id 
    and a.owner_emp_id = e.row_id 
+0

Что ваша версия базы данных? Я вижу, что 'siebel.s_srv_req.sr_area' является решающим фактором для конкретной группы билетов, сколько разных значений имеет этот столбец и чем они отличаются от« CE Implementation »,« Provisioning »и« Project Management »? – San

+0

№ заказа - 123 экземпляра службы Идентификатор = x1 ticket_no = экземпляр 7 службы реали ID = x1 CE ticket_no = экземпляр 8 Service ID = x1 Provisioning ticket_no = экземпляр 9 Service ID = x1 PM – user3148470

+0

версия базы данных 11g coloumn имеет много различных значений, но m интересуется только этими ce, Pm, pro .... проверить конкретный приемный билет GOC, чтобы найти его открытый, если открыть статус поиска CE, PM, PRo, иначе следующий экземпляр службы – user3148470

ответ

1

Попробуйте и поделиться результатами, у меня нет конфигурации для тестирования

with tab as (
    select a.sr_num Acceptance_TT, 
      a.act_open_dt Acceptance_Date, 
      e.login Acceptance_Owner, 
      c.sr_area, 
      c.sr_num, 
      c.act_open_dt, 
      d.login, 
      case when c.sr_stat_id in ('Closed','Cancelled') then '-' else c.sr_stat_id end TT_Status 
    from 
    siebel.s_srv_req a -- GOC TT 
    ,siebel.s_order_item b -- ServiceInstanceID 
    ,siebel.s_srv_req c -- CE Implementation 
    ,siebel.s_user d -- Owner 
    ,siebel.s_user e -- GOC Owner 
    where 
    a.sr_area = 'GOC Acceptance' and a.sr_num='20130601-3-28' 
    and a.sr_stat_id in ('Open - GOC') 
    and a.x_service_instance_id = b.row_id 
    and c.x_service_instance_id = b.row_id 
    and c.sr_area in ('CE Implementation', 'Project Management', 'Provisioning') 
    and c.owner_emp_id = d.row_id 
    and a.owner_emp_id = e.row_id 
    ) 
select * 
    from tab 
    pivot (min(TT_Status) as TT_Status for (sr_area) in ('CE Implementation' as CE, 'Project Management' as PM, 'Provisioning' as PRO)) 
+0

Эй, сан спасибо за ваше время и терпение, этот запрос работает нормально, я получил базу, я могу разработать запрос, чтобы удовлетворить мою потребность, спасибо большое SUPERMAN! – user3148470