Principales respuestas
AGRUPAR DATOS DE UNA CONSULTA VARIAS FILAS EN UNA

Pregunta
-
Buenas noches,
Tengo el siguiente problema al generar esta consulta, en la cual hay diferentes tipos de exámenes y por ende diferentes resultados, en este caso me genera 4 filas con valores en NULL donde el tipo de examen no corresponde.
La consulta:
SELECT DISTINCT
Paciente.TipoId
,Paciente.Identificacion
,Paciente.Nombres
,Paciente.Apellidos
,Paciente.FechaNacimiento
,Paciente.FechaIngreso
,Pariente.Telefono
,Paciente.Fase
,Pariente.Apellidos
,Pariente.Nombres
,TSH.TSH
,TSH.Tipo
,TamizajeAuditivo.TamizAuditivo
,ValoracionOftalmologica.Tipo
,Examen.Examen
,Examen.Resultado
,Procedimiento.Tipo
FROM
Paciente
INNER JOIN Pariente ON Paciente.Id=Pariente.Paciente
INNER JOIN TipoPariente ON Pariente.Tipo=TipoPariente.Id
INNER JOIN Procedimiento ON Paciente.Id=Procedimiento.Paciente
LEFT OUTER JOIN TSH ON Procedimiento.Id=TSH.Procedimiento
LEFT OUTER JOIN TamizajeAuditivo ON Procedimiento.Id=TamizajeAuditivo.Procedimiento
LEFT OUTER JOIN ValoracionOftalmologica ON Procedimiento.Id=ValoracionOftalmologica.Procedimiento
LEFT OUTER JOIN Examen ON Procedimiento.Id=Examen.Procedimiento
Where paciente.Identificacion= '1232803010' and TipoPariente.Id = '1' and Procedimiento.Tipo IN (5,6,7,14)El resultado:
TipoId
Identificacion
Nombres
Apellidos
FechaNacimiento
FechaIngreso
Telefono
Fase
Apellidos
Nombres
TSH
Tipo
TamizAuditivo
Tipo
Examen
Resultado
4
22222222
xxxxxx
yyyyyyy
00:00.0
00:00.0
55555555
2
zzzzzzz
aaaaaa
NULL
NULL
NULL
NULL
AMIEL TISON
36
4
22222222
xxxxxx
yyyyyyy
00:00.0
00:00.0
55555555
2
zzzzzzz
aaaaaa
NULL
NULL
NULL
1
NULL
NULL
4
22222222
xxxxxx
yyyyyyy
00:00.0
00:00.0
55555555
2
zzzzzzz
aaaaaa
NULL
NULL
NULL
2
NULL
NULL
4
22222222
xxxxxx
yyyyyyy
00:00.0
00:00.0
55555555
2
zzzzzzz
aaaaaa
4,74
1
NULL
NULL
NULL
NULL
Lo que se requiere:
TipoId
Identificacion
Nombres
Apellidos
FechaNacimiento
FechaIngreso
Telefono
Fase
Apellidos
Nombres
TSH
Tipo
TamizAuditivo
Tipo
Examen
Resultado
4
22222222
xxxxxx
yyyyyyy
00:00.0
00:00.0
55555555
2
zzzzzzz
aaaaaa
4,74
1
NULL
2
AMIEL TISON
36
Adicional tambien quisiera poder aplicar un filtro al Último campo "Tipo" campo sin que esa condición reduzca mi consulta a una sola fila con ese resultado. Por ejemplo en la primera foto la ultima columna representa el tipo de examen, hay dos TIPO 5 porque hay un tipo de examen 2, si lo coloco en el WHERE :
WHERE Paciente.Identificacion= '2222222222' and TipoPariente.Id = '1' and Procedimiento.Tipo IN (5,6,7,14) and ValoracionOftalmologica.Tipo = '2'
La consulta original se reduce a 1 fila sin los demás resultados.
Respuestas
-
En lugar de usar DISTINCT, utiliza un GROUP BY al final de la sentencia. Agrupa por todos los campos que son comunes, y en los campos que pueden llevar null, utiliza un MAX para que te devuelva el mayor valor que no sea null.
Es decir, algo así:
Select Paciente.TipoId ,Paciente.Identificacion , etc, etc ,MAX(TSH.TSH) As TSH ,MAX(TSH.Tipo) As Tipo , etc, etc FROM Paciente INNER JOIN etc etc GROUP BY Paciente.TipoId ,Paciente.Identificacion, etc, etc, Pariente.Nombres
en cuanto al filtro, ponle:
... and (ValoracionOftalmologica.Tipo = '2' OR ValoracionOftalmologica.Tipo IS NULL)
- Marcado como respuesta FabianCam martes, 1 de septiembre de 2020 6:22
Todas las respuestas
-
En lugar de usar DISTINCT, utiliza un GROUP BY al final de la sentencia. Agrupa por todos los campos que son comunes, y en los campos que pueden llevar null, utiliza un MAX para que te devuelva el mayor valor que no sea null.
Es decir, algo así:
Select Paciente.TipoId ,Paciente.Identificacion , etc, etc ,MAX(TSH.TSH) As TSH ,MAX(TSH.Tipo) As Tipo , etc, etc FROM Paciente INNER JOIN etc etc GROUP BY Paciente.TipoId ,Paciente.Identificacion, etc, etc, Pariente.Nombres
en cuanto al filtro, ponle:
... and (ValoracionOftalmologica.Tipo = '2' OR ValoracionOftalmologica.Tipo IS NULL)
- Marcado como respuesta FabianCam martes, 1 de septiembre de 2020 6:22
-