none
Obtener algun si no hay filas RRS feed

  • Pregunta

  • Hola a todos, que tal tengo una consulta, tengo una tabla que tiene 2 fk y un atributo que es entero llamado nvotos.

    Ahora, necesito saber como podria hacer que si no encuentra un registro en la tabla con sus 2 fk me salga un resultado como esto

    fk1         fk2        0

    y en caso si encuentre que retorne

    fk1         fk2       nvotos

    Como podria hacer esto?, muchas gracias a todos, estaba probando con un case exists y nada no me sale :(

    miércoles, 29 de septiembre de 2010 2:15

Respuestas

  • Hola.

    No sé si ya lo lograste, si aún formulas alguna pregunta. Por favor, expresa de nuevo tu duda.

    Por lo que estoy entendiendo, podrías hacerlo más o menos así:

    select pp.pp_codigo, pp.pp_imagen, pp.pp_descripcion, isnull(pxm.pxm_votos, 0) as pxm_votos
    from
     TBL_PARPOL pp left join 
     TBL_PPXMESVOT pxm on pp.pp_codigo = pxm.pp_codigo and pxm.mv_codigo = @mesa_codigo
    where pp.pp_codigo in 
    (select pp_codigo from TBL_PPXDIS where dis_codigo = @dis_codigo)
    
    

    No será lo que buscas exactamente (sería casualidad porque no capto bien lo que preguntas, si es que preguntas algo), pero a lo mejor te da una idea de cómo lograrlo.

    Evita el uso de tablas temporales siempre que puedas.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/

    miércoles, 29 de septiembre de 2010 14:41
    Moderador

Todas las respuestas

  • Hola.

    Para ello necesitarías contar con una tabla o consulta que contenga todas las posibles combinaciones de fk1 y fk2 y cruzarla con un left join que la consulta que ahora mismo tienes. Sería más o menos así:

    select C.fk1, C.fk2, isnull(cast(T.nvotos as varchar(10), 'T.nvotos') as nvotos
    from (select distinct fk1, fk2 from TablaRef) C left join MiTabla T on C.fk1 = T.fk1 and C.fk2 = T.fk2
    
    Si no lo logras, nos dices.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/

    miércoles, 29 de septiembre de 2010 6:37
    Moderador
  • hola qwalgrande, gracias por tu respuesta, acontinuacion te paso mi consulta actual. pp_codigo y mv_codigo son las fk y pxm_votos es el entero que deseo obtener de TBL_PPXMESVOT

    select pp.pp_codigo, pp.pp_imagen, pp.pp_descripcion, pxm.pxm_votos
    from TBL_PARPOL pp, TBL_PPXMESVOT pxm
    where pp.pp_codigo in (select pp_codigo from TBL_PPXDIS where dis_codigo = @dis_codigo)
    and pp.pp_codigo = pxm.pp_codigo and pxm.mv_codigo = @mesa_codigo
    

    Para la tabla deberia crear una tabla temporal y eso le quitaria mas rendimiento a mi consulta, estaba probando con un case primero obteniendo el valor y ejecutar alguna de las sentencias ya sea esta u otra donde ya le saco 0 de frente :D.

    Gracias por todo.

     

    miércoles, 29 de septiembre de 2010 14:13
  • Hola.

    No sé si ya lo lograste, si aún formulas alguna pregunta. Por favor, expresa de nuevo tu duda.

    Por lo que estoy entendiendo, podrías hacerlo más o menos así:

    select pp.pp_codigo, pp.pp_imagen, pp.pp_descripcion, isnull(pxm.pxm_votos, 0) as pxm_votos
    from
     TBL_PARPOL pp left join 
     TBL_PPXMESVOT pxm on pp.pp_codigo = pxm.pp_codigo and pxm.mv_codigo = @mesa_codigo
    where pp.pp_codigo in 
    (select pp_codigo from TBL_PPXDIS where dis_codigo = @dis_codigo)
    
    

    No será lo que buscas exactamente (sería casualidad porque no capto bien lo que preguntas, si es que preguntas algo), pero a lo mejor te da una idea de cómo lograrlo.

    Evita el uso de tablas temporales siempre que puedas.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/

    miércoles, 29 de septiembre de 2010 14:41
    Moderador
  • Hola qwalgrande, muchas gracias, esa consulta que me haz respondido funciona perfectamente!!!

    Para que no quede duda, lo que deseaba era sacar le valor de 0 si no encontraba algun registro, caso contrario saque el valor que corresponde

    Muchas gracias por tu ayuda y saludos a toda la comunidad.

    miércoles, 29 de septiembre de 2010 14:46