none
AGRUPAR DATOS DE UNA CONSULTA VARIAS FILAS EN UNA RRS feed

  • 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.


    martes, 1 de septiembre de 2020 5:29

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
    martes, 1 de septiembre de 2020 5:54

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
    martes, 1 de septiembre de 2020 5:54
  • Gracias amigo, quedo perfecto.
    martes, 1 de septiembre de 2020 6:23