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

Relacion entre Tablas *SQL SERVER 2008*

Estas en el tema de Relacion entre Tablas *SQL SERVER 2008* en el foro de SQL Server en Foros del Web. Hola querida gente del foro! Tengo una duda con una actualizacion que necesito hacer, se trata de una tabla donde tengo datos de Domicilios.T1 cuyos ...
  #1 (permalink)  
Antiguo 14/04/2011, 18:14
 
Fecha de Ingreso: abril-2011
Mensajes: 19
Antigüedad: 13 años, 1 mes
Puntos: 0
Pregunta Relacion entre Tablas *SQL SERVER 2008*

Hola querida gente del foro!
Tengo una duda con una actualizacion que necesito hacer, se trata de una tabla donde tengo datos de Domicilios.T1 cuyos campos (localidad, partido, provincia) estan compuestos por un codigo, ejemplo lo siguiente:

LOCALIDAD: L102
PARTIDO:K205
PROVINCIA:B


Donde mediante una tabla de referencias.T2 se lo siguiente:

LOCALIDAD: L102 = Monte Grande
PARTIDO:K205 = Esteban Echeverria
PROVINCIA:B = Buenos Aires


Ahora bien, una vez que identifico los literales que corresponden a cada codigo tengo que procesar el lote completo en una aplicacion que me devuelve el dato normalizado, es decir que puede devolver exactamente lo mismo o no!

Luego de normalizado el lote tengo que identificar aquellos casos cuya concatenacion entre (localidad+partido+provincia) de la tabla de domicilios.T1 es = a (localidad+partido+provincia) de la tabla de referencias.T2, esta parte es facil por que si es exactamente igual no tiene por que cambiar ninguno de los codigos.

Hasta aca estoy bien por que los puedo identificar, pero no encuentro la forma de impactar el codigo en los casos donde cambio alguno de esos tres literales.

Otro tema, la relacion entre tablas tiene que ser por literales, no hay ningun campo IDENTIFICADOR entre si.



Alguno tiene alguna sugerencia?

Se agradece cualquier cosa!


Saludos

Última edición por damprosys; 14/04/2011 a las 18:21
  #2 (permalink)  
Antiguo 15/04/2011, 14:23
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Relacion entre Tablas *SQL SERVER 2008*

¿Es algun trabajo escolar?
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 17/04/2011, 11:12
 
Fecha de Ingreso: abril-2011
Mensajes: 19
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Relacion entre Tablas *SQL SERVER 2008*

No, no es un trabajo escolar y no comprendo tu pregunta!
Si tenes algo para aportar bienvenido sea...
  #4 (permalink)  
Antiguo 18/04/2011, 09:44
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Relacion entre Tablas *SQL SERVER 2008*

La pregunta SIEMPRE se hace, ya que no se atienden trabajos escolares en este foro.

Muestranos el script de creacion de tus tablas.
__________________
MCTS Isaias Islas
  #5 (permalink)  
Antiguo 18/04/2011, 10:48
 
Fecha de Ingreso: abril-2011
Mensajes: 19
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Relacion entre Tablas *SQL SERVER 2008*

Cita:
Iniciado por iislas Ver Mensaje
La pregunta SIEMPRE se hace, ya que no se atienden trabajos escolares en este foro.

Muestranos el script de creacion de tus tablas.

Ok, perfecto! gracias por aclarar!

Aca te dejo la tabla donde tengo los datos de Domicilios:


CREATE TABLE [dbo].[A_DOMICILIOS_BUE](
[ID_NORM] [varchar](10) NULL,
[calle] [nvarchar](200) NULL,
[numero] [nvarchar](200) NULL,
[piso] [nvarchar](200) NULL,
[depto] [nvarchar](200) NULL,
[barrio] [nvarchar](200) NULL,
[localidad] [nvarchar](200) NULL,
[partido] [nvarchar](200) NULL,
[provincia] [nvarchar](200) NULL,
[cp] [nvarchar](200) NULL,
[cpa] [nvarchar](200) NULL,
[observaciones] [nvarchar](200) NULL,
[iduser] [nvarchar](20) NULL,
[estado] [nvarchar](20) NULL,
[motivo] [nvarchar](20) NULL,
[distancia] [nvarchar](20) NULL,
[desde] [nvarchar](20) NULL,
[hasta] [nvarchar](20) NULL,
[supervisor] [nvarchar](20) NULL,
[irresoluble] [int] NULL,
[fecha] [datetime] NULL,
[PISO_DEPTO_NORM] [varchar](60) NULL,
[OBSERVACIONES_NEW] [varchar](100) NULL
) ON [PRIMARY]


Y aca va la Tabla de referencia con los codigos de Localidad, Provincia, Partido:



CREATE TABLE [dbo].[A_REFERENCIAS_TABLA_444](
[COD_PROV] [nvarchar](255) NULL,
[PROVINCIA] [nvarchar](255) NULL,
[PARTIDO] [nvarchar](255) NULL,
[LOCALIDAD] [nvarchar](255) NULL,
[CP] [float] NULL,
[COD_444] [nvarchar](255) NULL
) ON [PRIMARY]



Muchas gracias!!
  #6 (permalink)  
Antiguo 18/04/2011, 11:44
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Relacion entre Tablas *SQL SERVER 2008*

¿Ambas tablas, se relacionan mediante CP?
__________________
MCTS Isaias Islas
  #7 (permalink)  
Antiguo 18/04/2011, 13:52
 
Fecha de Ingreso: abril-2011
Mensajes: 19
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Relacion entre Tablas *SQL SERVER 2008*

Cita:
Iniciado por iislas Ver Mensaje
¿Ambas tablas, se relacionan mediante CP?

La realidad es que luego de pasar por el normalizador de direcciones esto puede cambiar, es decir que si normaliza la calle y existe en esa localidad puede ser que por la altura el CP cambie, por eso la relacion que yo hago es (a.localidad+a.partido+a.provincia=b.lodalidad+b.p artido+b.provincia).

Creo haberlo solucionado!

este es el query:

update A_DOMICILIOS_BUE set COD_LOCALIDAD_DEVOL=b.COD_444,COD_PROVINCIA_DEVOL= b.COD_PROV
from A_DOMICILIOS_BUE a,A_REFERENCIAS_TABLA_444 b
where LTRIM(RTRIM(a.provincia))+LTRIM(RTRIM(a.partido))+ LTRIM(RTRIM(a.localidad))=LTRIM(RTRIM(b.provincia) )+LTRIM(RTRIM(b.partido))+LTRIM(RTRIM(b.localidad) )

Que opinas?
  #8 (permalink)  
Antiguo 18/04/2011, 16:36
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Relacion entre Tablas *SQL SERVER 2008*

Se ve bien, ¿lo has probado ya?
__________________
MCTS Isaias Islas
  #9 (permalink)  
Antiguo 19/04/2011, 11:37
 
Fecha de Ingreso: abril-2011
Mensajes: 19
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Relacion entre Tablas *SQL SERVER 2008*

si, lo probe y al parecer asigna bien los cambios en los codigos de localidad, de esta forma no compara el antes y el despues sino que busca el codigo solo en el "despues" para asignarselo sin importar el codigo que tenia antes, de esta manera, si cambio la localidad tambien cambia el codigo!

Sucede que ahora necesito sacar estos datos en un archivo plano de ancho fijo delimitado por pipe-line y estoy probando con el siguiente query pero no creo que este bien, podrias verificarlo por favor?

select
right(a.identificador,4)+'|'+
right(a.cliente,9)+'|'+
right(a.version,3)+'|'+
right(a.codigo_direccion,8)+'|'+
right(b.cod_provincia_devol,2)+'|'+
right(b.cod_localidad_devol,6)+'|'+
right(b.calle,50)+'|'+
right(b.numero,5)+'|'+
right('P:'+b.PISO+'D:'+b.depto+space(15),15)+'|'+
right(b.cp,6)+'|'+
right(b.cpa,8)+'|'+
left(b.estado+' '+b.motivo+b.observaciones+space(128),128)+'|'+
right(a.CODIGO_PROVINCIA,2)+'|'+
right(a.codigo_localidad,6)+'|'+
right(a.codigo_partido,5)+'|'+
right(a.nombre_calle,50)+'|'+
right(a.altura,5)+'|'+
right(b.piso_depto,15)+'|'+
right(a.codigo_postal,6)+'|'+
right(a.codigo_postal_completo,8)+'&'
FROM A_DOMICILIOS_TOTAL_ORIG a, A_DOMICILIOS_BUE2 b, mer_idmap_59_bkp c
where a.id_concat=c.id
and b.ID_NORM=c.id



Muchas gracias por tu ayuda!

Última edición por damprosys; 19/04/2011 a las 11:54
  #10 (permalink)  
Antiguo 19/04/2011, 12:07
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Relacion entre Tablas *SQL SERVER 2008*

Utiliza el servicio de SSIS (integracion de datos) de SQL Server para exportar tus datos a un archivo plano o si lo prefieres a la antigua con BCP.EXE
__________________
MCTS Isaias Islas
  #11 (permalink)  
Antiguo 19/04/2011, 13:04
 
Fecha de Ingreso: abril-2011
Mensajes: 19
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Relacion entre Tablas *SQL SERVER 2008*

Ok, voy a probarlo, tenes razon, de todas maneras aca encontre la forma mediante un query, el query anterior estaba mal por que alineaba las columnas a derecha, pero utilizando el LEFT me di cuenta que dejaba los espacios necesarios hasta llegar al pipeline.

select
left(a.identificador+space(4),4)+'|'+
left(a.cliente+space(9),9)+'|'+
left(a.version+space(3),3)+'|'+
left(a.codigo_direccion+space(8),8)+'|'+
left(b.cod_provincia_devol+space(2),2)+'|'+
left(b.cod_localidad_devol+space(6),6)+'|'+
left(b.calle+space(50),50)+'|'+
left(b.numero+space(5),5)+'|'+
left('P:'+b.PISO+'D:'+b.depto+space(15),15)+'|'+
left(b.cp+space(6),6)+'|'+
left(b.cpa+space(8),8)+'|'+
left(b.estado+' '+b.motivo+b.observaciones+space(128),128)+'|'+
left(a.CODIGO_PROVINCIA+space(2),2)+'|'+
left(a.codigo_localidad+space(6),6)+'|'+
left(a.codigo_partido+space(5),5)+'|'+
left(a.nombre_calle+space(50),50)+'|'+
left(a.altura+space(5),5)+'|'+
left(b.piso_depto+space(15),15)+'|'+
left(a.codigo_postal+space(6),6)+'|'+
left(a.codigo_postal_completo+space(8),8)+'&'
FROM A_DOMICILIOS_TOTAL_ORIG a, A_DOMICILIOS_BUE2 b, mer_idmap_59_bkp c
where a.id_concat=c.id
and b.ID_NORM=c.id


Lo dejo por si alguien mas tiene dudas del ancho fijo delimitado!

Saludos
  #12 (permalink)  
Antiguo 19/04/2011, 14:29
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Relacion entre Tablas *SQL SERVER 2008*

Es como tratar de inventar la "coca-cola", todo lo que haces en tu query, se puede hacer en un SSIS
__________________
MCTS Isaias Islas
  #13 (permalink)  
Antiguo 20/04/2011, 10:19
 
Fecha de Ingreso: abril-2011
Mensajes: 19
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Relacion entre Tablas *SQL SERVER 2008*

Perdon pero tengo una duda con respecto a esta linea de codigo del query anterior:

left('P:'+b.PISO+'D:'+b.depto+space(15),15)+'|'+

Aqui se supone que deberia ante poner el prefijo 'P:' en el piso y 'D:' en el Departamento, pero solo si el campo tiene un piso y un departamento de lo contrario deberia ir nulo, como podria hacerlo?

Estuve probando con CASE pero me da error por que evidentemente la sintaxis no la estoy haciendo bien! podrias darme una mano con esto iislas????

Muchas gracias!

Etiquetas: relacion, server, sql, 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 01:24.