22/08/2007, 13:12
|
| | | Fecha de Ingreso: agosto-2007
Mensajes: 54
Antigüedad: 17 años, 5 meses Puntos: 0 | |
Re: help me!!! Muchas GRACIAS Adres95, todo estubo bien
Solo tube que hacerle unas modificaciones (ya que mi maquina si estan los nombres en mayusculas pues...) y quedo asi mira:
Código:
Select A.EMPLID
,A.LAST_NAME
,A.SECOND_LAST_NAME
,A.FIRST_NAME
,A.MIDDLE_NAME
,A.BIRTHDATE
,A.MAR_STATUS
,A.SEX
--------------------
,B.EFFDT
,B.EFFSEQ
,B.HOURLY_RT
,B.CURRENCY_CD
,B.PAYGROUP
,B.COMPANY
,B.GL_PAY_TYPE
,B.[ACTION]
,B.ACTION_REASON
,B.EFFDT
,B.ANNUAL_RT
,B.DEPTID
,B.FLSA_STATUS
--------------------
,isnull((Select Top 1 NATIONAL_ID_TYPE From PS_PERS_NID Where EMPLID = A.EMPLID),'') AS NATIONAL_ID_TYPE
--------------------
,D.EFFDT
,D.SWT_MAR_STATUS
--------------------
,E.EFFDT
,E.ADDRESS1
,E.ADDRESS2
,E.CITY
,E.COUNTRY
,E.POSTAL
--------------------
,isnull((Select Top 1 PHONE From PS_EMERGENCY_CNTCT Where EMPLID = A.EMPLID),'') AS PHONE
From PS_PERSONAL_DATA A
Left outer join
(Select Jobs.EMPLID
,Jobs.HOURLY_RT
,Jobs.CURRENCY_CD
,Jobs.PAYGROUP
,Jobs.COMPANY
,Jobs.GL_PAY_TYPE
,Jobs.ACTION
,Jobs.ACTION_REASON
,Jobs.EFFDT
,Jobs.EFFSEQ
,Jobs.ANNUAL_RT
,Jobs.DEPTID
,Jobs.FLSA_STATUS
From PS_JOB Jobs
Inner join
(SELECT EMPLID, MAX(EFFDT) EFFDT FROM PS_JOB P Group By EMPLID) JobsMax
On Jobs.EMPLID = JobsMax.EMPLID And
Jobs.EFFDT = JobsMax.EFFDT) B
On A.EMPLID = B.EMPLID
Left outer join
(Select Taxes.EMPLID
,Taxes.SWT_MAR_STATUS
,Taxes.EFFDT
From PS_STATE_TAX_DATA Taxes
Inner join
(SELECT EMPLID, MAX(EFFDT) EFFDT FROM PS_STATE_TAX_DATA Group By EMPLID) TaxesMax
On Taxes.EMPLID = TaxesMax.EMPLID And
Taxes.EFFDT = TaxesMax.EFFDT) D
On A.EMPLID = D.EMPLID
Left outer join
(Select Address.EMPLID
,Address.EFFDT
,Address.ADDRESS1
,Address.ADDRESS2
,Address.CITY
,Address.COUNTRY
,Address.POSTAL
From PS_ADDRESSES Address
Inner join
(SELECT EMPLID, MAX(EFFDT)EFFDT FROM PS_STATE_TAX_DATA Group By EMPLID) AddressMax
On Address.EMPLID = AddressMax.EMPLID And
Address.EFFDT = AddressMax.EFFDT) E
On A.EMPLID = E.EMPLID
Si te abras dado cuenta quite los campos que agregaste (gracias) "EFFDT" Y "EFFSEQ" por que en algunas de las tablas donde las agregaste no estaban y pues me sacaba un error...
Ahora, la tabla de PS_PERSONAL_DATA tiene 8028 registros y la consulta que tu me mandas (gracias) me manda 8410 registros por la siguiente razon:
Al mandar:
Código:
(SELECT EMPLID, MAX(EFFDT) EFFDT FROM PS_JOB P Group By EMPLID) JobsMax
On Jobs.EMPLID = JobsMax.EMPLID And
Jobs.EFFDT = JobsMax.EFFDT
No me trae registros repetidos (exelente, gracias) pero solo tomando en cuenta "EFFDT" esto es si yo tengo una serie de registros asi:
EMPLID EFFDT
L00001 2004-01-23
L00001 2004-01-23
L00001 1995-01-22
L00001 1996-01-07
L00001 1996-02-02
L00001 1997-02-02
L00001 1998-02-01
L00001 2000-01-16
Me da esto:
EMPLID EFFDT
L00001 2004-01-23
L00001 2004-01-23
Por que los dos tienen la fecha maxima Pero hay otro campo que s puede utilizar como llave que es el de "EFFSEQ" yo supongo que puedo utilizar el mismo codigo que se utiliza para "EFFDT" masomenos asi
Código:
(SELECT EMPLID, MAX(EFFSEQ) EFFSEQ FROM PS_JOB P Group By EMPLID) JobsMax
On Jobs.EMPLID = JobsMax.EMPLID And
Jobs.EFFDT = JobsMax.EFFSEQ)
por que tambien tiene un numero consecutivo la secuencia efectiva "EFFSEQ" si hay mas de una fecha efectiva "EFFDT" .
ojala me haya explicado con tanta tonteria y espero su respuesta MASTER
salu2 |