none
Como o se puede obtner un dato auque el valor sea NULL RRS feed

  • Debate general

  • En esta BD solamente puedo hacer consultas por lo tanto modificar no puedo
    Ahora Tengo la siguiente consulta
    SELECT
    [cNum_Control]
    ,[IDUMedica]
    ,[NombreUMedica]
    ,[cClues]
    ,egr.[IDPaciente]
    ,[dFecha_Ingreso]
    ,[cOrigen]
    ,[cDiagnostico]
    ,[cSituacionLegal]
    ,[cProdece_SituacionLegal]
    ,[cNum_Hospitalizacion]
    ,[IDPersonal_Medico]
    ,[cNom_Personal_Med]
    ,[cComentario]
    ,[IDServicio]
    ,[Servicio_Final]
    ,[IDAreaMedica]
    ,[cCve_Cama]
    ,egr.[cStatus]
    ,[cNum_Historia_Clinica]
    ,[ServicioFinal_CortaEstancia]
    ,[Servicio_InicialCortaEstancia]
    ,[cIndicaciones_Egreso]
    ,[dFecha_Alta]
    ,[cTipo_Alta]
    ,[cSituacionLegal_Egreso]
    ,[cProdece_SituacionLegal_Egreso]
    ,[cServicio_Inicial]
    ,[Servicio_Inicial]
    ,[cAreaMedica_Inicial]
    ,[cCve_Cama_Inicial]
    ,[cPaterno]
    ,[cMaterno]
    ,egr.[cNombre]
    ,[dFechaNacimiento]
    ,[Años]
    ,[Meses]
    ,[Dias]
    ,[Horas]
    ,est.cNombre AS cEstadoNacimiento
    ,[cSexo]
    ,[cGrupoSanguineo]
    ,[cFactorRH]
    ,[cSituacion]
    ,[IDEscolaridad]
    ,civ.cDescripcion
    ,[IDReligion]
    ,[IDOcupacion]
    ,ddp.[IDEstado]
    ,[Estado]
    ,ddp.[IDJurisdiccion]
    ,ddp.[IDMunicipio]
    ,[Municipio]
    ,ddp.[IDLocalidad]
    ,[Localidades]
    ,ddp.[cCalle]
    ,ddp.[cNumExterior]
    ,ddp.[cNumInterior]
    ,ddp.[cEntreCalles]
    ,ddp.[cCP]
    ,col.cNombre AS cColonia
    ,[IDExpediente]
    ,[Dia_Ingreso]
    ,[Mes_Ingreso]
    ,[Año_Ingreso]
    ,[dFecha_Hoja_Hosp_Alta]
    ,[Dia_Egreso]
    ,[Mes_Egreso]
    ,[Año_Egreso]
    ,[Dias_Estancia]
    ,[ProcedenciaReferidoPor]
    ,[DerechohabienteIMSS]
    ,[DerechohabienteISSSTE]
    ,[DerechohabientePEMEX]
    ,[DerechohabienteSEDENA]
    ,[DerechohabienteSECMAR]
    ,[DerechohabienteGOBESTATAL]
    ,[DerechohabienteSEGPRIVADO]
    ,[DerechohabienteSP]
    ,[DerechohabienteSEIGNORA]
    ,[DerechohabienteNINGUNO]
    ,[FolioSeguroPopular]
    ,[IDTipoLesion]
    ,[TipoLesion]
    ,[IDSitioLesion]
    ,[SitiodeLesion]
    ,[ConProductoUnico]
    ,[ConProductoMultiple]
    ,[NacimientoEutocico]
    ,[NacimientoDistocico]
    ,[ExpulsoProducto]
    ,[NacimientoCesarea]
    ,[DxPrimeraVez]
    ,[InfeccionNosocimial]
    ,[InfeccionNosocomial_clave]
    ,[InfeccionNosocomial_descripcion]
    ,[MedicoResponsable]
    ,[TipoDeAtencion]
    ,[DxLesiones]
    ,[OP_Hormonal]
    ,[OP_DIU]
    ,[OP_OCLUSIÓN]
    ,[OP_NO]
    ,[ncertifica_defuncion]
    ,[Dfecha_NacHosPro]
    ,[folio_defun_producto]
    ,[NumGestas]
    ,[NumPartos]
    ,[NumCesarias]
    ,[Numabortos]
    ,[CausaBasicaDef]
    ,[nVecesDiagPrincipal]
    ,[Num_Control_Madre]
    ,[cCircunstancia]
    ,[SeConsideraIndigena]
    ,[HablaEspañol]
    ,[HablaOEntiendeAlgunaLenguaIndigena]
    ,[idLenguaIndigena]
    ,[MINISTERIOPUBLICOSI]
    ,[MINISTERIOPUBLICONO]
    ,[DerechohabienteOportunidades]
    ,[DerechohabienteSeguridadGratuita]
    ,[SEMANASAMENOREA]
    ,[Peso]
    ,[Talla]
    ,[pase_otro_hospital]
    FROM vw_Imprimir_Hoja_Egreso egr, Det_DomicilioPacientes ddp, Ctl_Colonias col, Ctl_EstadoCivil civ, Ctl_Estados est
    WHERE ddp.IDPaciente = egr.IDPaciente AND egr.cNum_Control = '20100036' AND egr.IDEstado = col.IDEstado AND egr.IDJurisdiccion = col.IDJurisdiccion AND egr.IDMunicipio = col.IDMunicipio AND egr.IDLocalidad = col.IDLocalidad AND ddp.IDColonia = col.IDColonia AND egr.IDEdoCivil = civ.IDEdoCivil AND est.IDEstado = egr.cEdoNacimiento

    Estoy consultando algunas tablas para obtner la informacion
    [vw_Imprimir_Hoja_Egreso] egr, Det_DomicilioPacientes ddp, Ctl_Colonias col, Ctl_EstadoCivil civ, Ctl_Estados est

    Tambien para obtener a la persona que quiero lo hago pasandole un cNum_Control que es de tipo BigInt

    Mi problema es que en la tabla Det_DomicilioPacientes con el alias ddp en el campo IDColonia a veces este campo contiene valores NULL aunque no deberia y a la hora de comparar este campo con el campo IDColonia de la tabla Ctl_Colonias col ya no me regresa nada la consulta.

    Este campo es utilizado para saber el nombre de la colonia donde vive el paciente. Y me gustaria que si este campo es NULL que no lo tome encuenta y que me de los otros datos.

    Se puede hacer esto, de que si el campo es NULL ignore esa parte de la consulta y arroje los otros datos?. O no se puede hacer eso y los pacientes que tienen en su domicilio IDColonia un NULL no se podran mostrar?

    lunes, 24 de junio de 2019 15:47

Todas las respuestas

  • Hola D38U933:

    Prueba:

      AND (ddp.IDColonia = col.IDColonia or col.IdColonia is null)

    lunes, 24 de junio de 2019 16:46
  • me sigue mostrando todo vació
    lunes, 24 de junio de 2019 17:06
  • WHERE ddp.IDPaciente = egr.IDPaciente 
    AND egr.cNum_Control = '20100036' 
    AND egr.IDEstado = col.IDEstado 
    AND egr.IDJurisdiccion = col.IDJurisdiccion 
    AND egr.IDMunicipio = col.IDMunicipio 
    AND egr.IDLocalidad = col.IDLocalidad 
    AND ((ddp.IDColonia = col.IDColonia) or (ddp.IdColonia is null))
    AND egr.IDEdoCivil = civ.IDEdoCivil 
    AND est.IDEstado = egr.cEdoNacimiento 
    ¿Estás seguro de que esas tablas no tienen un id, para normalizar los registros?



    lunes, 24 de junio de 2019 18:07
  • Se puede hacer esto, de que si el campo es NULL ignore esa parte de la consulta y arroje los otros datos?.

    Sí, pero tienes que usar la sintaxis moderna (SQL-92) en lugar del obsoleto SQL-89 que estás usando.

    En otras palabras, tienes que relacionar las tablas usando el JOIN...ON en lugar del WHERE...AND. Una vez que la hayas convertido en JOIN, basta que pongas LEFT JOIN o RIGHT JOIN según el lado en el que se encuentre la tabla en la que quieras despreciar los NULL (o en general donde quieras despreciar la falta de concordancia en el campo de unión) y ya está, solo con eso ya te salen los datos.

    Te pongo un ejemplo sencillito porque el tuyo tiene muchos datos y está muy liado. En lugar de hacer esto:

    SELECT loQueSea FROM T1, T2 WHERE T1.Campo1=T2.Campo2 AND otraCondicion

    se pone esto otro:

    SELECT loQUeSea FROM T1 JOIN T2 ON T1.Campo1=T2.Campo2 WHERE otraCondicion

    Hasta aquí es todo igual, la segunda sentencia es exactamente igual a la primera solo que la segunda usa la sintaxis moderna, que tiene la ventaja de que diferencia claramente las condiciones de nexo entre tablas (ON) de las condiciones de filtro de registro (WHERE).

    Bien, pues si ahora cambias "JOIN" por "LEFT JOIN" te devuelve todos los registros de T1 aunque no tengan concordancia en T2 (bien sea porque tienen un NULL en campo1 o porque tienen un valor en T1 que no existe en campo2). Y si pones "RIGHT JOIN" entonces te da todos los registros de T2 aunque no exista concordancia en T1. También puedes poner FULL JOIN o FULL OUTER JOIN para sacar todos los registros tanto de T1 como de T2.

    lunes, 24 de junio de 2019 18:17
  • creo que ya lo resolvi, modificando la consulta

      FROM vw_Imprimir_Hoja_Egreso egr
      INNER JOIN Det_DomicilioPacientes ddp ON egr.cNum_Control = '11000036' AND ddp.IDPaciente = egr.IDPaciente
      LEFT JOIN Ctl_Colonias col ON egr.IDEstado = col.IDEstado AND egr.IDJurisdiccion = col.IDJurisdiccion AND egr.IDMunicipio = col.IDMunicipio AND egr.IDLocalidad = col.IDLocalidad AND ddp.IDColonia = col.IDColonia
      INNER JOIN Ctl_EstadoCivil civ ON egr.IDEdoCivil = civ.IDEdoCivil
      INNER JOINCtl_Estados est ON est.IDEstado = egr.cEdoNacimiento

    Gracias compañeros, por sus respuestas

    lunes, 24 de junio de 2019 18:37
  • gracias, vi tarde la respuesta. pero si terminé haciéndola como explicas
    lunes, 24 de junio de 2019 18:44
  • Hola D38U993:

    Pero que utilices la sintaxis Ansi 92, no es que lo pongas todo en el ON.

    Llévate al where las restricciones, dejando en el ON las relaciones. Ten cuidado con los conjuntos INNER después de un left.

    FROM vw_Imprimir_Hoja_Egreso egr
      INNER JOIN Det_DomicilioPacientes ddp ON  ddp.IDPaciente = egr.IDPaciente
      INNER JOIN Ctl_EstadoCivil civ ON egr.IDEdoCivil = civ.IDEdoCivil
      INNER JOINCtl_Estados est ON est.IDEstado = egr.cEdoNacimiento
      LEFT JOIN Ctl_Colonias col ON egr.IDEstado = col.IDEstado 
        AND egr.IDJurisdiccion = col.IDJurisdiccion 
        AND egr.IDMunicipio = col.IDMunicipio 
        AND egr.IDLocalidad = col.IDLocalidad 
        AND ddp.IDColonia = col.IDColonia
    WHERE 
    egr.cNum_Control = '11000036'


    lunes, 24 de junio de 2019 18:56
  • ohhhhhh, Gracias.

    no le entiendo muy bien a los JOIN soy aun de usar alias por lo mismo XD XD

     y ahora con lo que me han explicado los dos, me ando dando una idea. mas lo q tenga que leer.

    Muchas Gracias


    son unos Crack (maestros, profesionales)
    • Editado D38U993 lunes, 24 de junio de 2019 19:28
    lunes, 24 de junio de 2019 19:28