Select

17/10/2003 - 10:31 por Rodrigo Corral González | Informe spam
Dada la siguiente estructura de tablas:

DROP TABLE #Personas
DROP TABLE #Direcciones

CREATE TABLE [#Personas] (
[IdPersona] [int] IDENTITY (1, 1) NOT NULL ,
[Nombre] [nvarchar] (50) NOT NULL ,
) ON [PRIMARY]
GO

CREATE TABLE [#Direcciones] (
[IdTipoDir] [int] NOT NULL , --1 primaria 2 secundaria
[IdPersona] [int] NOT NULL ,
[Direccion] [nvarchar] (50)
) ON [PRIMARY]
GO

INSERT #Personas (Nombre) VALUES ('Rodrigo') --Solo dirección primaria
INSERT #Direcciones (IdPersona, IdTipoDir, Direccion) VALUES (1, 1,
'Dirección primaria Rodrigo')

INSERT #Personas (Nombre) VALUES ('Javier') --Solo secundaria
INSERT #Direcciones (IdPersona, IdTipoDir, Direccion) VALUES (2, 2,
'Dirección secundaria Javier')

INSERT #Personas (Nombre) VALUES ('Antonio') --Primaria y secundaria
INSERT #Direcciones (IdPersona, IdTipoDir, Direccion) VALUES (3, 1,
'Dirección primaria Antonio')
INSERT #Direcciones (IdPersona, IdTipoDir, Direccion) VALUES (3, 2,
'Dirección secundaria Antonio')

Neceisto la select que me devuelva los datos de una persona y su dirección,
de manera que si una persona tiene dirección secundaria sea esta la que se
devuelva y si no tiene secundaria se devuelva la primaria. Para los datos
del ejemplo:

IdPersona Nombre IdTipoDir
IdPersona Direccion
-
1 Rodrigo 1
1 Dirección primaria Rodrigo
2 Javier 2
2 Dirección secundaria Javier
3 Antonio 2
3 Dirección secundaria Antonio

Gracias de antemano por su ayuda
Un saludo
Rodrigo Corral González
 

Leer las respuestas

#1 Liliana Sorrentino
17/10/2003 - 13:31 | Informe spam
Hola Rodrigo,
antes que nada, gracias por facilitarnos toda la información necesaria para
ayudarte.
Acá mi sugerencia.
Saludos... Liliana.

SELECT P.IdPersona, Nombre, ISNULL(DS.IdTipoDir, DP.IdTipoDir),
ISNULL(DS.IdPersona, DP.IdPersona), ISNULL(DS.Direccion, DP.Direccion)
FROM #Personas P
LEFT JOIN #Direcciones DP ON P.IdPersona = DP.IdPersona AND DP.IdTipoDir = 1
LEFT JOIN #Direcciones DS ON P.IdPersona = DS.IdPersona AND DS.IdTipoDir = 2

"Rodrigo Corral González" escribió en el mensaje
news:
Dada la siguiente estructura de tablas:

DROP TABLE #Personas
DROP TABLE #Direcciones

CREATE TABLE [#Personas] (
[IdPersona] [int] IDENTITY (1, 1) NOT NULL ,
[Nombre] [nvarchar] (50) NOT NULL ,
) ON [PRIMARY]
GO

CREATE TABLE [#Direcciones] (
[IdTipoDir] [int] NOT NULL , --1 primaria 2 secundaria
[IdPersona] [int] NOT NULL ,
[Direccion] [nvarchar] (50)
) ON [PRIMARY]
GO

INSERT #Personas (Nombre) VALUES ('Rodrigo') --Solo dirección primaria
INSERT #Direcciones (IdPersona, IdTipoDir, Direccion) VALUES (1, 1,
'Dirección primaria Rodrigo')

INSERT #Personas (Nombre) VALUES ('Javier') --Solo secundaria
INSERT #Direcciones (IdPersona, IdTipoDir, Direccion) VALUES (2, 2,
'Dirección secundaria Javier')

INSERT #Personas (Nombre) VALUES ('Antonio') --Primaria y secundaria
INSERT #Direcciones (IdPersona, IdTipoDir, Direccion) VALUES (3, 1,
'Dirección primaria Antonio')
INSERT #Direcciones (IdPersona, IdTipoDir, Direccion) VALUES (3, 2,
'Dirección secundaria Antonio')

Neceisto la select que me devuelva los datos de una persona y su


dirección,
de manera que si una persona tiene dirección secundaria sea esta la que se
devuelva y si no tiene secundaria se devuelva la primaria. Para los datos
del ejemplo:

IdPersona Nombre IdTipoDir
IdPersona Direccion
-
1 Rodrigo 1
1 Dirección primaria Rodrigo
2 Javier 2
2 Dirección secundaria Javier
3 Antonio 2
3 Dirección secundaria Antonio

Gracias de antemano por su ayuda
Un saludo
Rodrigo Corral González


Preguntas similares