0

ピープルソフト初心者です。発効日は概念的には理解できますが、SQRではまだ苦労しています。PS_JOB テーブルから有効な日付の empid を取得するにはどうすればよいですか? 取得した empid の ps_names から有効な empname を取得するにはどうすればよいですか? 前もって感謝します!

4

3 に答える 3

0

以下のクエリは、Emplid 'XXX' を持つ従業員の最新データを PS_JOB からフェッチします。

SELECT * FROM PS_JOB J WHERE J.EMPLID = 'XXX' 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 < TRUNC(SYSDATE)) AND J.EMPL_RCD = ( SELECT MAX(J2.EMPL_RCD) FROM PS_JOB J2 WHERE J2.EMPLID = J.EMPLID AND J2.EFFDT = J.EFFDT ) AND J.EFFSEQ = ( SELECT MAX(J3.EFFSEQ ) FROM PS_JOB J3 WHERE J3.EMPLID = J.EMPLID AND J3.EMPL_RCD = J.EMPL_RCD AND J3.EFFDT = J.EFFDT)
ORDER BY J.EMPLID 、J.EMPL_RCD、J.EFFDT、J.EFFSEQ

于 2015-07-26T15:20:46.533 に答える
0

名前とジョブ テーブルをそれぞれの発効日で結合します。ここでは、アクティブな従業員の名前のみが必要であると仮定して、A、L、P、S の従業員を取り上げました。そうでない場合は、empl_status 基準を削除できます。また、メインの基準で name_type を指定する必要があります。そうしないと、1 つの 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')
于 2015-04-21T14:22:14.387 に答える