none
Dúvida : Retorno de registro em um select dependendo de uma situação especifica RRS feed

  • Pergunta

  • Olá pessoal, bom dia.

    Tenho problemas numa query que não sei como proceder,e gostaria de saber,por favor,se vcs poderiam me dar uma força a resolver este caso.

    A situação é que  tenho uma tabela chamada LOG_DE_PARAMETROS e tenho como colunas [IDPARAMETROS],[TPPARAMETRO],[FKCONSULTA],  [PARAMETRO].Eu tenho como objetivo fazer um select desses elementos com base no [FKCONSULTA]e dependendo da situação que aparecer(e que eu vou citar abaixo),eu não retorno dado nenhum.

    A situação que está me ocorrendo o problema é essa:

    Ao executar essa rotina usando uma FKCONSULTA aleatória, ela retorna 2 ou mais dados,conforme exemplo de rotina e  resultado abaixo:

    Rotina :

    SELECT * from LOG_DE_PARAMETROS where FKCONSULTA= '2685563'

     

    Resultado :

    [IDPARAMETROS] [TPPARAMETRO] [FKCONSULTA]  [PARAMETRO]

    3075885                      12                    2685563           XYZA123
    3075886                      18                    2685563            BOV

    -------------------------------------------------------------------------------------------------------------------------------------------------------------

    O que eu preciso fazer é mostrar o resultado limpo(sem registros/tuplas) caso apareça a palavra BOV no campo [PARAMETRO],mesmo que apareça dois registros ou mais na FKCONSULTA;caso não apareça a palavra 'BOV', o resultado é mostrado normalmente.

     

    Como proceder??

     

    Desde já,muito obrigado.

     

    Att,

     

    Guilherme Pereira

     

     

     

     

    • Editado gppereira3 sexta-feira, 22 de outubro de 2010 15:38
    sexta-feira, 22 de outubro de 2010 13:24

Todas as Respostas

  • Bom dia Gppereira3,

    Não sei se entendi direito o que você precisa mas pelo que entendi se a coluna PARAMETRO estiver com o valor BOV então todas as outras colunas recebem 0, correto?

     

    Se for segue um exemplo, não sei se é o melhor jeito de tratar este cenário mas trará o resultado esperado.

     

    declare @LOG_DE_PARAMETROS  as table(
    IDPARAMETROS int,
    TPPARAMETRO int,
    FKCONSULTA int,
    PARAMETRO varchar(10))

    insert into @LOG_DE_PARAMETROS values(3075885,12,2685563,'XYZA123');
    insert into @LOG_DE_PARAMETROS values(3075886,18,2685563,'BOV');

    select
        case parametro
            when  'BOV' then 0
            else IDPARAMETROS end as IDPARAMETROS,
        case parametro
            when  'BOV' then 0
            else TPPARAMETRO end as TPPARAMETRO,
        case parametro
            when  'BOV' then 0
            else FKCONSULTA end as FKCONSULTA,
        case parametro
            when  'BOV' then '0'
            else parametro end as parametro       
    from @LOG_DE_PARAMETROS;

     

     

    Qualquer problema notifique-me.

     

    Att,

     

    Adriano Nascimento

     

    sexta-feira, 22 de outubro de 2010 14:05
  • Adriano, boa tarde.

    Na verdade, o que eu preciso fazer é mostrar o resultado limpo(sem tuplas) caso apareça a palavra BOV no campo [PARAMETRO],mesmo que apareça dois registros ou mais na FKCONSULTA;caso não apareça a palavra 'BOV', o resultado é mostrado normalmente.

    Peço desculpas por não ter entendido o tópico direito.

    sexta-feira, 22 de outubro de 2010 15:37
  • SELECT * FROM LOG_DE_PARAMETROS Q
    WHERE Q.FKCONSULTA = '2685563' 
      AND NOT EXISTS ( SELECT 1 FROM LOG_DE_PARAMETROS P WHERE P.FKCONSULTA = Q.FKCONSULTA AND P.PARAMETRO = 'BOV' )  



    asc
    sábado, 23 de outubro de 2010 16:30
  • Guilherme,

    Você deseja fazer esta análise através de um comando condicional algo do tipo IF?

    Caso contrário a dica do Alisson Cardoso é uma alternativa interessante fazendo uso de operador lógico condicional Not Exists com base em uma subquery.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
    terça-feira, 26 de outubro de 2010 12:19