none
consulta em mais de uma tabela SQL RRS feed

  • Pergunta

  • Ola pessoal,

     

    eu sei que esta dificil de entender pelo assunto vou tentar detalhar mais o meu problema. Preciso fazer o seguinte criar um relatório que traga pra min na primeira coluna o numero do Centro, e desses valores tragos eu possa fazer o restante da pesquisa eu consegui criar a segunda parte do procedimento depois que pegar esse valor trago eu faço a outra pesquisa. Eu não estou conseguindo pegar todos os valores da primeira consulta quando eu utilizo uma varial ele so retorna o primeiro valor encontrado sendo que eu preciso de todos os valores. Segue abaixo o codigo que consegui fazer para segunda parte.

     

    1º parte: Essa parte que esta em amarelo é onde eu preciso armazenar todos os valores encontrados  nessa tabela. Na parte de baixo eu utilizo o resultado encontado para dar continuidade como mostra.


    declare @centro int
    select @centro = txt_01 from bras_cent

    2º parte:

     

    select txt_01 as [Centro],

    (select count(tipopaci)from bras_incl where tipopaci = 1 and numecent = @centro)as [Caso/Registro],  
    (select count(tipopaci) from bras_incl where tipopaci = 2 and numecent = @centro)as [Registro],
    (select count(tipopaci) from bras_incl where tipopaci = 3 and numecent = @centro) as [Controle],
    (select datediff(Day,max(dataincl), getdate()) from bras_incl where tipopaci = 3 and numecent = @centro) as [Diferença ultima inclusao]
    from bras_cent where txt_01 = @centro

    segunda-feira, 28 de julho de 2008 17:45

Respostas

  • Segue abaixo o que eu fiz para solucionar o meu problema. Criei uma procedure que quando executada faz um

    1º select e para pegar os valores que quero utilizar como condição e inseri-los em cursor

    2º select para pegar a quantidade de elementos da tabela e insiro em uma variavel (@fim)

    3º utilizo um while para percorrer a tabela utilizando os elemtentos do 1º select 

    4º faço um select e iniros os valores em uma tabela auxiliar (select dentro do insert)

    5º por ultimo faço um select na tabela auxliar para popular o gridview

    Para chamar a procedure no dataSource digite exec "momedaprocedure" 

     

    /*CRIA UMA PROCEDURE*/
    create Procedure teste
    as
     /* CRIA UM CURSOR*/
     Declare tmp Cursor
     Local /*PROPRIEDADE DO CURSOR*/
     Fast_forward /*PROPRIEDADE DO CURSOR*/
     for select txt_01 from bras_cent /*INSERE OS VALROES NO CURSOR*/

     /* DELCARA AS VARIAVES*/
     declare @centro int
     declare @contador int
     declare @fim int
     select @fim = count(txt_01) from bras_cent /*VERIFICA QUANTOS */
     OPEN tmp
     SET @contador = 1
     While @contador <= @fim
     BEGIN
      fetch tmp into @centro
      
      /*FAZ UM SELECT NOS CAMPOS E INSER OS VALORES EM UMA TABELA TEMPORARIA*/
      insert into bras_rela_view (Centro, Caso, Registro, Controle, total, Data)
      (SELECT(select txt_01 from bras_cent where txt_01 = @centro),
             (select count(tipopaci)from bras_incl where tipopaci = 1 and numecent = @centro),  
             (select count(tipopaci) from bras_incl where tipopaci = 2 and numecent = @centro),
             (select count(tipopaci) from bras_incl where tipopaci = 3 and numecent = @centro),
             (select count(tipopaci) from bras_incl where numecent = @centro),

             /*SUBTRAI A DATA ENCONTRADA NA TABELA PELA DATA CORRENTE E MOSTRA A DIFERENÇA E DIAS*/
             (select datediff(Day,max(dataincl), getdate()) from bras_incl where numecent = @centro))
      
     
      SET @contador = @contador + 1
     end
     /*FAZ UM SELECT NA TABELA TEMPORARIA*/
     select
     Centro as [Centro],
     Caso as [Caso/Registro],
     Registro as [Registro],
     Controle as [Controle],
     total as [Total de Inclusão],
     isnull(Data,'') as [Ultima inclusão feita (dias)]
      from bras_rela_view
     order by Centro
     
     Close tmp
     DEALLOCATE tmp
     TRUNCATE table bras_rela_view

    Prontinho ai esta o código que utilizei para solucionar o problema.

     

    Até mais se o post for util para alguem não deixe de marca-lo

     

    quinta-feira, 31 de julho de 2008 11:31