Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Como actualizo datos de una tabla a otra (detalle, encabezado)

Estas en el tema de Como actualizo datos de una tabla a otra (detalle, encabezado) en el foro de SQL Server en Foros del Web. Saludos amigos, Soy nuevo en el foro y recien he empezado a aprender de SQL Server. Necesito actualizar una tabla con datos de otra, el ...
  #1 (permalink)  
Antiguo 26/08/2010, 14:47
 
Fecha de Ingreso: agosto-2010
Mensajes: 9
Antigüedad: 11 años, 10 meses
Puntos: 0
Como actualizo datos de una tabla a otra (detalle, encabezado)

Saludos amigos,

Soy nuevo en el foro y recien he empezado a aprender de SQL Server.

Necesito actualizar una tabla con datos de otra, el caso es el siguiente:

Tengo una tabla llamada CLIENTES y otra llamada TELEFONOS_ACT. En la primera están los datos generales de los clientes y en la segunda hay un listado de teléfonos. En esta tabla TELEFONOS_ACT hay un registro por cada teléfono que tenga un cliente.

Necesito actualizar los teléfonos en la tabla CLIENTES a partir de la tabla TELEFONOS_ACT.

Las tablas tienen en común un campo llamado ID_cliente.

En la tabla CLIENTES tengo tres campos llamados TELEFONO1, TELEFONO2, TELEFONO3

Como hago en SQL Server 2008 para leer los datos de cada cliente en TELEFONOS_ACT y actualizar los campos TELEFONO1, TELEFONO2, TELEFONO3.

Por ejemplo:

Tengo en CLIENTES el siguiente registro

ID_cliente Nombre Telefono1 Telefono2 Telefono3
500100 Juan Díaz


En TELEFONOS_ACT tengo:

ID_cliente Telefono
500100 2384-3456
500100 2384-3457
500100 8325-1234

Necesito que en CLIENTES el registro quede

ID_cliente Nombre Telefono1 Telefono2 Telefono3
500100 Juan Díaz 2384-3456 2384-3457 8325-1234

Gracias por su ayuda.
  #2 (permalink)  
Antiguo 26/08/2010, 21:01
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 15 años
Puntos: 180
Respuesta: Como actualizo datos de una tabla a otra (detalle, encabezado)

De acuerdo, ¿que avance llevas de tu query?
  #3 (permalink)  
Antiguo 27/08/2010, 14:26
 
Fecha de Ingreso: agosto-2010
Mensajes: 9
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Como actualizo datos de una tabla a otra (detalle, encabezado)

Pues he recibido algunos consejos en otros foros y me enviaron esto.

with tlfs as
(
select
ID_cliente ,
ROW_NUMBER () over ( Partition by ID_cliente order by Telefono asc ) as RowNum ,
TELEFONO
from
TELEFONOS_ACT
)
update CLIENTES set
telefono1 =( select TELEFONO from tlfs where tlfs . id_cliente = CLIENTES . Id_cliente and rownum = 1 ),
telefono2 =( select TELEFONO from tlfs where tlfs . id_cliente = CLIENTES . Id_cliente and rownum = 2 ),
telefono3 =( select TELEFONO from tlfs where tlfs . id_cliente = CLIENTES . Id_cliente and rownum = 3 )

Aun no lo he probado, pero realmente se poco de T-SQL y estoy algo perdido

Tu que opinas?
  #4 (permalink)  
Antiguo 27/08/2010, 21:12
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 15 años
Puntos: 180
Respuesta: Como actualizo datos de una tabla a otra (detalle, encabezado)

pues no le veo logica
  #5 (permalink)  
Antiguo 01/09/2010, 14:30
 
Fecha de Ingreso: agosto-2010
Mensajes: 9
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Como actualizo datos de una tabla a otra (detalle, encabezado)

Que me podrías sugerir, para resolverlo. Sigo detenido con esto.

Gracias
  #6 (permalink)  
Antiguo 01/09/2010, 15:27
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 15 años
Puntos: 180
Respuesta: Como actualizo datos de una tabla a otra (detalle, encabezado)

Veamos

¿Solo son TRES (3) telefonos? o puede haber mas...
__________________
MCTS Isaias Islas
  #7 (permalink)  
Antiguo 01/09/2010, 15:42
 
Fecha de Ingreso: agosto-2010
Mensajes: 9
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Como actualizo datos de una tabla a otra (detalle, encabezado)

Hay posibilidad de un 4to numero, pero no es una constante frecuente
  #8 (permalink)  
Antiguo 01/09/2010, 16:16
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 15 años, 6 meses
Puntos: 447
Respuesta: Como actualizo datos de una tabla a otra (detalle, encabezado)

Y por qué no haz probado el código que te comentan??? te explico la lógica que según yo está aplicando en la consulta:

La primer parte, donde utiliza el with es para agregar un ordinal a tu tabla de Telefonos y lo almacena en una tabla llamada "tlfs" de tal manera que esta tabla tiene la siguiente estructura

ID_cliente|RowNum|Telefono
500100|1|2384-3456
500100|2|2384-3457
500100|3|8325-1234

Lo que resta es simplemente hacer subconsultas para actualizar cada uno de los teléfonos donde telefono1 correspondería al marcado con el rownum 1 y así sucesivamente.

Saludos
Leo.
  #9 (permalink)  
Antiguo 01/09/2010, 16:26
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 15 años
Puntos: 180
Respuesta: Como actualizo datos de una tabla a otra (detalle, encabezado)

Coloca el UPDATE SET adicional, en caso de haber un 4o numero

Código SQL:
Ver original
  1. -- Creo mis tablas de prueba
  2. CREATE TABLE #cliente (id INT IDENTITY (1,1) PRIMARY KEY, Nombre VARCHAR(50), telefono1 VARCHAR(10), telefono2 VARCHAR(10),telefono3 VARCHAR(10))
  3. CREATE TABLE #telefonos (id INT, idtel INT, telefono VARCHAR(10))
  4.  
  5. -- Inserto mis registros de prueba
  6. INSERT INTO #cliente VALUES ('Israel Hinojosa', '','','')
  7. INSERT INTO #telefonos VALUES( 1, 1, '1234567890')
  8. INSERT INTO #telefonos VALUES( 1, 2, '1234509876')
  9. INSERT INTO #telefonos VALUES( 1, 3, '6789012345')
  10. -- Reviso mis datos
  11. SELECT * FROM #cliente
  12. SELECT * FROM #telefonos
  13. -- Creo mi CTE
  14. WITH tels (id, idtel, telefono) AS
  15. (
  16. SELECT
  17. id ,
  18. idtel ,
  19. telefono
  20. FROM
  21. #telefonos
  22. )
  23. -- Actualizo en base al CTE  
  24. UPDATE #cliente SET
  25. telefono1 = (SELECT telefono FROM tels WHERE id = #cliente.id AND idtel = 1),
  26. telefono2 = (SELECT telefono FROM tels WHERE id = #cliente.id AND idtel = 2),
  27. telefono3 = (SELECT telefono FROM tels WHERE id = #cliente.id AND idtel = 3)
  28. -- Compruebo la actualizacion
  29. SELECT * FROM #cliente
__________________
MCTS Isaias Islas
  #10 (permalink)  
Antiguo 01/09/2010, 16:42
 
Fecha de Ingreso: agosto-2010
Mensajes: 9
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Como actualizo datos de una tabla a otra (detalle, encabezado)

Bien funciona perfecto, muchas gracias por su valiosa ayuda, me han sacado de un apuro.

Gracias
  #11 (permalink)  
Antiguo 01/09/2010, 17:26
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 15 años
Puntos: 180
Respuesta: Como actualizo datos de una tabla a otra (detalle, encabezado)

Bueno, hoy hice mi buena obra
__________________
MCTS Isaias Islas
  #12 (permalink)  
Antiguo 02/09/2010, 15:36
 
Fecha de Ingreso: agosto-2010
Mensajes: 9
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Como actualizo datos de una tabla a otra (detalle, encabezado)

Islas:

Todo bien con el código que me enviaste. Pero ahora necesito hacer algo y no se como hacerlo. Basado en tu ejemplo, necesito contar las ocurrencias en la tabla de telefonos. Es decir

Tengo 3 telefonos para un mismo id, como hago para numerár automáticamente el idtel de cada ocurrencia?

Gracias por tu ayuda
  #13 (permalink)  
Antiguo 02/09/2010, 16:20
 
Fecha de Ingreso: agosto-2010
Mensajes: 9
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Como actualizo datos de una tabla a otra (detalle, encabezado)

Bien leyendo un poco, encontré la instruccion row_number() y con esta linea de comandos logré numerar.

select ID,TELEFONO,CEDULA, row_number() over(partition by cedula order by telefono) as idtel from telefonos;

Ahora solo tengo que lograr actualizar la base de datos y listo.

Como ves esto?
  #14 (permalink)  
Antiguo 02/09/2010, 21:18
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 15 años
Puntos: 180
Respuesta: Como actualizo datos de una tabla a otra (detalle, encabezado)

perfecto !!
__________________
MCTS Isaias Islas
  #15 (permalink)  
Antiguo 03/09/2010, 11:20
 
Fecha de Ingreso: agosto-2010
Mensajes: 9
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Como actualizo datos de una tabla a otra (detalle, encabezado)

Estoy intentando usar with, pero aun no logro que me funcione correctamente. Es decir no funciona.

Pueden ayudarme
  #16 (permalink)  
Antiguo 03/09/2010, 11:52
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 15 años
Puntos: 180
Respuesta: Como actualizo datos de una tabla a otra (detalle, encabezado)

¿tenemos 2005 u 2008?, porque si es 2000 (o menor), olvidalo...
__________________
MCTS Isaias Islas
  #17 (permalink)  
Antiguo 03/09/2010, 12:02
 
Fecha de Ingreso: agosto-2010
Mensajes: 9
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Como actualizo datos de una tabla a otra (detalle, encabezado)

Es 2008 el que estoy usando
  #18 (permalink)  
Antiguo 03/09/2010, 12:57
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 15 años
Puntos: 180
Respuesta: Como actualizo datos de una tabla a otra (detalle, encabezado)

¿Entonces, cual es el problema?
__________________
MCTS Isaias Islas

Etiquetas: detalle, encabezado, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:29.