Principales respuestas
Obtener algun si no hay filas

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 :(
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/- Propuesto como respuesta Alberto López Grande (qwalgrande)Moderator miércoles, 29 de septiembre de 2010 14:41
- Marcado como respuesta xlaptmktm miércoles, 29 de septiembre de 2010 14:46
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í:
Si no lo logras, nos dices.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
Alberto López Grande
SQL Server MVP
Visita mi blog en http://qwalgrande.blogspot.es/- Propuesto como respuesta Alberto López Grande (qwalgrande)Moderator miércoles, 29 de septiembre de 2010 6:37
-
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.
-
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/- Propuesto como respuesta Alberto López Grande (qwalgrande)Moderator miércoles, 29 de septiembre de 2010 14:41
- Marcado como respuesta xlaptmktm miércoles, 29 de septiembre de 2010 14:46
-
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.