2015-04-03 6 views
0

Я новичок в peopleoft. Я могу понять дату вступления в действие на концептуальном уровне, но я все еще боюсь с ним в SQR. Как получить эффективный датированный документ из таблицы PS_JOB? Как получить правильное имя empname из ps_names для извлеченного empid? Заранее спасибо!Как извлечь эффективную датированную копию из таблицы PS_JOB

+0

вы спрашиваете о синтаксисе запроса SQL в SQR? – Bob

ответ

0

текущее имя - из представления ps_names_vw вы можете использовать аналогичное предложение where для таблицы ps_job.

select a.emplid, 
     a.name_type, 
     a.effdt, 
     a.last_name, 
     a.first_name, 
     a.middle_name, 
     a.name_prefix, 
     a.name_suffix, 
     a.last_name_srch, 
     a.first_name_srch, 
     a.name_display 
    from ps_names a 
where a.effdt = (select max (b.effdt) 
        from ps_names b 
        where b.emplid  = a.emplid and 
         b.name_type = a.name_type and 
         b.effdt  <= to_date (to_char (sysdate, 'YYYY-MM-DD'), 'YYYY-MM-DD')); 
0

Соедините имена и таблицу рабочих мест со своей соответствующей датой вступления в силу. здесь я взял сотрудников A, L, P, S, считая, что вам нужны только имена активных сотрудников. Если нет, вы можете удалить критерий empl_status. Также вам нужно указать имя_имя в главном критерии, иначе несколько строк могут быть возвращены для одного emplid.

SELECT * FROM PS_NAMES N, PS_JOB J 
WHERE N.EMPLID = J.EMPLID 
AND N.EFFDT = (SELECT MAX(N1.EFFDT) FROM PS_NAMES N1 
       WHERE N1.EMPLID= N.EMPLID 
       AND N1.NAME_TYPE = N.NAME_TYPE 
       AND N1.EFFDT <= SYSDATE) 
AND J.EFFDT = (SELECT MAX(J1.EFFDT) FROM PS_JOB J1 
       WHERE J1.EMPLID = J.EMPLID 
       AND J1.EMPL_RCD = J.EMPL_RCD 
       AND J1.EFFDT <= SYSDATE) 
AND J.EFFSEQ = (SELECT MAX(J2.EFFSEQ) FROM PS_JOB J2 
       WHERE J2.EMPLID = J.EMPLID 
       AND J2.EMPL_RCD = J.EMPL_RCD 
       AND J2.EFFDT = J.EFFDT) 
AND J.EMPL_STATUS IN ('A','L','P','S') 
0

Ниже запрос будет получать вам самые последние данные работника с Emplid 'XXX' от PS_JOB

SELECT * FROM PS_JOB J WHERE J.EMPLID = 'XXX' И J.EFFDT = (SELECT MAX (J1.EFFDT) ОТ PS_JOB J1 ГДЕ J1.EMPLID = J.EMPLID И J1.EMPL_RCD = J.EMPL_RCD И J1.EFFDT < ОТБР (SYSDATE)) И J.EMPL_RCD = (SELECT MAX (J2.EMPL_RCD) ОТ PS_JOB J2 Где J2.EMPLID = J.EMPLID И J2.EFFDT = J.EFFDT) И J.EFFSEQ = (SELECT MAX (J3.EFFSEQ) ОТ PS_JOB J3 ГДЕ J3.EMPLID = J.EMPLID И J3.EMPL_RCD = J.EMPL_RCD И J3.EFFDT = J.EFFDT)
ORDER BY J.EMPLID, J.EMPL_RCD, J.EFFDT, J.EFFSEQ