нужна помощь sql запрос - PullRequest
       1

нужна помощь sql запрос

1 голос
/ 30 августа 2011

У меня есть один запрос, указанный ниже в этой таблице Employee, ShiftAllocation, ShiftMaster (два для двух смен: Shift1 и shift2)

SELECT     
   Em.EmployeeId, Em.EmployeeName,
   Sa.ShiftAllocationDate, Sa.ShiftId2, Sa.ShiftId, Sm.ShiftName,
   Sm2.ShiftName AS ShiftName2, Sa.ShiftAllocationId 
FROM        
   ShiftAllocation AS Sa 
INNER JOIN
   EmployeeMaster AS Em ON Sa.EmployeeId = Em.EmployeeId 
LEFT OUTER JOIN
   ShiftMaster AS Sm2 ON Sa.ShiftId2 = Sm2.ShiftId
LEFT OUTER JOIN
   ShiftMaster AS Sm ON Sa.ShiftId = Sm.ShiftId

Я получаю этот вывод:

 ShiftAlld EmployeeId  EmployeeName ShiftAllDate shiftId2 ShifId ShiftName ShiftName2 
   1           19          XYZ       2011-08-01 NULL     1     General    NULL
   2           19          XYZ       2011-08-02 NULL     1     General    NULL
   3           19          XYZ       2011-08-02 NULL    -1     NULL       NULL
   4           19          XYZ       2011-08-02 NULL     1     General    NULL
   5           19          XYZ       2011-08-02 NULL    -2     NULL       NULL
   6           19          XYZ       2011-08-02 NULL     1     General    NULL

хочу

  • shiftId -1 значение должно назначить ShiftName как Неделя выключена
  • ShiftId -2 значение должно назначить ShiftName как Holiday
  • ShiftId2 NULL значение должно назначить ShiftName2 как Not Assign

Я хочу этот вывод:

ShiftAlld EmployeeId  EmployeeName ShiftAllDate shiftId2 ShifId ShiftName ShiftName2 
   1           19          XYZ       2011-08-01 NULL     1     General    NotAssign  
   2           19          XYZ       2011-08-02 NULL     1     General    NotAssign  
   3           19          XYZ       2011-08-02 NULL    -1     WeekOff    NotAssign  
   4           19          XYZ       2011-08-02 NULL     1     General    NotAssign  
   5           19          XYZ       2011-08-02 NULL    -2     Holiday    NotAssign  
   6           19          XYZ       2011-08-02 NULL     1     General    NotAssign  

Ответы [ 2 ]

2 голосов
/ 30 августа 2011

Вы можете использовать футляр примерно такого типа (не проверенный, поэтому там может быть любое количество опечаток).

select Em.EmployeeId, 
       Em.EmployeeName,
       Sa.ShiftAllocationDate, 
       Sa.ShiftId2, 
       Sa.ShiftId, 
       case when sa.ShiftId = -1 then 'Week Off'
            when sa.ShiftId = -2 then 'Holiday'
            else sm.ShiftName
       end as ShiftName,
       case when sm2.ShiftId is null then 'Not assigned'
            else Sm2.ShiftName
       end as ShiftName2, 
       Sa.ShiftAllocationId 
from ShiftAllocation as Sa 
  inner join EmployeeMaster as Em 
    on Sa.EmployeeId = Em.EmployeeId 
  left outer join ShiftMaster as Sm2 
    on Sa.ShiftId2 = Sm2.ShiftId 
  left outer join ShiftMaster as Sm 
    on Sa.ShiftId = Sm.ShiftId
1 голос
/ 30 августа 2011

Хотя я не уверен, будет ли это лучшим способом сделать это; вы можете попробовать использовать CASE в вашем sql, чтобы прийти к решению.

Редактировать: Это http://www.dba -oracle.com / t_case_sql_clause.htm должно помочь вам, если вы хотите попробовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...