Consulta actualizacion datos de la misma tabla

16/04/2004 - 11:39 por Miguel Tubia | Informe spam
Hola,
tengo una tabla de empleados, en la que con cada contrato se le crea una
nueva fila. A los últimos empleados al encargado se le olvidó meter los
números de teléfono () y necesito que coja los campos tfno y telefono1
del último contrato que tuvo y lo ponga en el nuevo.
Se sabe cuando es nuevo pq el campo estado es null. Si se le dio de baja un
contrato ese campo valdrá 'B'. Es un varchar(1).
El último contrato q tuvo se sabe por el campo baja1. Este campo almacena la
fecha, datetime, de cuando se le dio de baja.
Solo se le han de poner los datos si los campos tfno y telefono1 del nuevo
contrato son null, pues alguno sí q introdujo.
El empleado se identifica por dni
Habia hecho la siguiente consulta, pero me da un error y me gustaria me
ayudaran si es posible:

update Datos
set tfno=isnull(tfno, (select tfno from Datos d2 where d2.dni=d.dni and
d2.estado='B' and d2.baja1=(select max (baja1) from Datos d3 where
d3.dni=d.dni))),
telefono=isnull(telefono, (select telefonofrom Datos d2 where d2.dni=d.dni
and d2.estado='B' and d2.baja1=(select max (baja1) from Datos d3 where
d3.dni=d.dni)))
from Datos d

Me dice que la tabla datos es ambigua. Seguro q he cometido varias
barbaridades con la consulta... si alguien me pudiera ayudar a realizarla le
estaria muy agradecido
Un saludo
 

Leer las respuestas

#1 Adrian D. Garcia
16/04/2004 - 12:13 | Informe spam
Puedes intentar con esta opcion, no la he verificado en detalle pero te dara
una idea de por donde ir en caso de error.

update Datos
set
tfno=isnull(d.tfno, d2.tfno),
telefono=isnull(d.telefono, d2.telefonofrom
from Datos d
inner join Datos d2 on
d2.dni=d.dni and
d2.estado='B' and
d2.baja1=(select max (d3.baja1) from Datos d3 where d3.dni=d.dni)

Tambien creo que se podria optimizar esta parte mas: " d2.baja1=(select max
(d3.baja1) from Datos d3 where d3.dni=d.dni) "

Saludos

Adrian D. Garcia
NDSoft
MCSD

"Miguel Tubia" escribió en el mensaje
news:
Hola,
tengo una tabla de empleados, en la que con cada contrato se le crea una
nueva fila. A los últimos empleados al encargado se le olvidó meter los
números de teléfono () y necesito que coja los campos tfno y telefono1
del último contrato que tuvo y lo ponga en el nuevo.
Se sabe cuando es nuevo pq el campo estado es null. Si se le dio de baja


un
contrato ese campo valdrá 'B'. Es un varchar(1).
El último contrato q tuvo se sabe por el campo baja1. Este campo almacena


la
fecha, datetime, de cuando se le dio de baja.
Solo se le han de poner los datos si los campos tfno y telefono1 del nuevo
contrato son null, pues alguno sí q introdujo.
El empleado se identifica por dni
Habia hecho la siguiente consulta, pero me da un error y me gustaria me
ayudaran si es posible:

update Datos
set tfno=isnull(tfno, (select tfno from Datos d2 where d2.dni=d.dni and
d2.estado='B' and d2.baja1=(select max (baja1) from Datos d3 where
d3.dni=d.dni))),
telefono=isnull(telefono, (select telefonofrom Datos d2 where d2.dni=d.dni
and d2.estado='B' and d2.baja1=(select max (baja1) from Datos d3 where
d3.dni=d.dni)))
from Datos d

Me dice que la tabla datos es ambigua. Seguro q he cometido varias
barbaridades con la consulta... si alguien me pudiera ayudar a realizarla


le
estaria muy agradecido
Un saludo


Preguntas similares