none
Colocar o resultado de uma consulta com union em uma variavel RRS feed

  • Pergunta

  • Pessoal bom dia, como faço para colocar o resultado dessa consulta dentro de uma variavel, tentei com uma tabela temporária e não deu certo.

    SELECT  SUM(VALTRA)
                      FROM TRANSACAO
                      WHERE TIPTRA < 80000
                      AND CPF = 00938884220 AND CODCLI = 80679
                      AND CODRTA IN (''V'', ''P'')
                      AND DATFECCLI IS NULL
                      UNION
                SELECT SUM(VALTRA)   FROM CONTROLLIFE_AUTORIZADOR.dbo.CTTRANS
                      WHERE  CAST(CODCLI AS INT) = 80679
                         And CPF = 00938884220
                         And ((TIPTRA < 80000) or (TIPTRA = 800000))
                         And (CODRTA  = ''V'' OR (CODRTA = ''P'' AND PROCESSADA = ''N''))

    sexta-feira, 28 de março de 2014 12:11

Respostas

Todas as Respostas

  • Como assim uma variável?

    Já tentou fazer um Fetch?

    dá uma olhada aqui

    Segue um exemplo:

    DECLARE @SUM AS INT;
    DECLARE @TOTAL AS INT;
    
    DECLARE vCursor CURSOR FOR
    SELECT  SUM(VALTRA) 
                      FROM TRANSACAO 
                      WHERE TIPTRA < 80000 
                      AND CPF = 00938884220 AND CODCLI = 80679
                      AND CODRTA IN (''V'', ''P'') 
                      AND DATFECCLI IS NULL
                      UNION 
                SELECT SUM(VALTRA)   FROM CONTROLLIFE_AUTORIZADOR.dbo.CTTRANS 
                      WHERE  CAST(CODCLI AS INT) = 80679
                         And CPF = 00938884220
                         And ((TIPTRA < 80000) or (TIPTRA = 800000)) 
                         And (CODRTA  = ''V'' OR (CODRTA = ''P'' AND PROCESSADA = ''N'')) 
    OPEN vCursor;
    
    --lê primeira linha
    FETCH NEXT FROM vCursor INTO @SUM
    
    --verifica se ainda possui registros
    WHILE @@FETCH_STATUS = 0
    BEGIN
    
    	SET @TOTAL = @TOTAL + @SUM;
    	
       --le proxima linha
    	FETCH NEXT FROM vCursor INTO @SUM
    END



    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski


    sexta-feira, 28 de março de 2014 12:24
  • Kanaâm na verdade o valor é o mesmo, não tem outra forma de fazer sem usar cursor não?


    sexta-feira, 28 de março de 2014 12:43
  • Bom dia,

    DougAmFm, experimente dessa forma:

    set @Total =
        (SELECT  SUM(VALTRA) 
         FROM TRANSACAO 
         WHERE TIPTRA < 80000 
         AND CPF = 00938884220 AND CODCLI = 80679
         AND CODRTA IN (''V'', ''P'') 
         AND DATFECCLI IS NULL) +
        (SELECT SUM(VALTRA)
         FROM CONTROLLIFE_AUTORIZADOR.dbo.CTTRANS 
         WHERE  CAST(CODCLI AS INT) = 80679
         And CPF = 00938884220
         And ((TIPTRA < 80000) or (TIPTRA = 800000)) 
         And (CODRTA  = ''V'' OR (CODRTA = ''P'' AND PROCESSADA = ''N'')));

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    sexta-feira, 28 de março de 2014 13:04
  • Da forma que o gapimex sugeriu abaixo também funciona.

    Sugeri o cursor por se tratar de mais de um valor e ficaria dinâmico caso você adicionasse mais tabelas.

    Mas pode fazer da forma do gapimex que vai funcionar.

    Abraço!


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    sexta-feira, 28 de março de 2014 13:11
  • SELECT distinct C.CGC, C.CODCLI,
    LTRIM(RTRIM(C.NOMCLI))+REPLICATE(' ', 50-LEN(LTRIM(RTRIM(C.NOMCLI)))) AS NOMCLI,
    T.DATTRA, U.NUMDEP,
    dbo.MascaraCartao(T.CODCRT , 17), T.CPF,
    LTRIM(RTRIM(U.NOMUSU))+REPLICATE(' ', 48-LEN(LTRIM(RTRIM(U.NOMUSU)))) AS NOMUSU,
    U.STA, U.MAT, T.VALTRA,
    (
    SELECT  SUM(VALTRA)  
            FROM TRANSACAO T2
        WHERE T2.TIPTRA < 80000
                      AND T2.CODCLI =C.CODCLI AND T2.CPF = T.CPF
                      AND T2.CODRTA IN ('V','P')
                      AND T2.DATFECCLI IS NULL
                      UNION
                SELECT SUM(VALTRA)   
                       FROM CONTROLLIFE_AUTORIZADOR.dbo.CTTRANS T3
                       WHERE  CAST(T3.CODCLI AS INT) = C.CODCLI
                       AND T3.CPF = T.CPF
                       AND ((T3.TIPTRA < 80000) or (T3.TIPTRA = 800000))
                       AND (T3.CODRTA  = 'V' OR (T3.CODRTA = 'P' AND T3.PROCESSADA = 'N'))
    ) AS TOT_VALTRA
    FROM CLIENTE C
         LEFT JOIN  TRANSACAO T ON T.CODCLI = C.CODCLI
         RIGHT JOIN USUARIO AS U ON T.CODCLI = U.CODCLI
         AND T.CPF = U.CPF AND T.NUMDEP = U.NUMDEP
    WHERE T.TIPTRA = 999005 and convert(datetime,round(convert(float,T.DATTRA),0,1))
    BETWEEN '20140310' AND '20140328'
     AND T.CODCLI >= 84001 and T.CODCLI <= 84001 order by C.CODCLI, NOMUSU

    Eu mudei e coloquei a consulta pra trazer como uma sub consulta, so que não esta trazendo,

    sexta-feira, 28 de março de 2014 14:23
  • Tenta trocar o Union por um sinal de mais (+).

    E não tenho certeza, mas talvez seja necessário colocar cada parte da subquery entre parenteses.

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    sexta-feira, 28 de março de 2014 14:52
  • Gapimex

    eu acho que o erro pode ser que na subconsulta estou usando esta condição WHERE T2.TIPTRA < 80000 e na consulta principal WHERE T.TIPTRA = 999005, não sei se isso pode estar causando o erro

    sexta-feira, 28 de março de 2014 15:10
  • Acho que essas condições não provocariam nenhum erro.

    Qual mensagem de erro está sendo exibida?

    O trecho ficou dessa forma?

    (
        (SELECT  SUM(VALTRA)  
         FROM TRANSACAO T2
         WHERE T2.TIPTRA < 80000
         AND T2.CODCLI =C.CODCLI AND T2.CPF = T.CPF
         AND T2.CODRTA IN ('V','P')
         AND T2.DATFECCLI IS NULL)
    
         +
    
        (SELECT SUM(VALTRA)   
         FROM CONTROLLIFE_AUTORIZADOR.dbo.CTTRANS T3
         WHERE  CAST(T3.CODCLI AS INT) = C.CODCLI 
         AND T3.CPF = T.CPF
         AND ((T3.TIPTRA < 80000) or (T3.TIPTRA = 800000))
         AND (T3.CODRTA  = 'V' OR (T3.CODRTA = 'P' AND T3.PROCESSADA = 'N')))
    ) AS TOT_VALTRA


    Assinatura: http://www.imoveisemexposicao.com.br

    sexta-feira, 28 de março de 2014 17:16
  • na verdade gapimex, não esta dando erro, soque no valor tot_valtra era pra trazer resultado, quando consulta faço a consulta separado me traz o resultado quando coloco ela como sub consulta me da resultado null
    sexta-feira, 28 de março de 2014 18:47
  • Se pode ocorrer de uma das partes da consulta retornar null então experimente adicionar a função Coalesce:

    (
        COALESCE
            ((SELECT  SUM(VALTRA)  
              FROM TRANSACAO T2
              WHERE T2.TIPTRA < 80000
              AND T2.CODCLI =C.CODCLI AND T2.CPF = T.CPF
              AND T2.CODRTA IN ('V','P')
              AND T2.DATFECCLI IS NULL), 0)
    
         +
    
        COALESCE
            ((SELECT SUM(VALTRA)   
              FROM CONTROLLIFE_AUTORIZADOR.dbo.CTTRANS T3
              WHERE  CAST(T3.CODCLI AS INT) = C.CODCLI 
              AND T3.CPF = T.CPF
              AND ((T3.TIPTRA < 80000) or (T3.TIPTRA = 800000))
              AND (T3.CODRTA  = 'V' OR (T3.CODRTA = 'P' AND T3.PROCESSADA = 'N'))), 0)
    ) AS TOT_VALTRA

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    sexta-feira, 28 de março de 2014 19:14
  • não, oq acontece essa consulta

    (
        COALESCE
            ((SELECT  SUM(VALTRA)  
              FROM TRANSACAO T2
              WHERE T2.TIPTRA < 80000
              AND T2.CODCLI =C.CODCLI AND T2.CPF = T.CPF
              AND T2.CODRTA IN ('V','P')
              AND T2.DATFECCLI IS NULL), 0)
    
         +
    
        COALESCE
            ((SELECT SUM(VALTRA)   
              FROM CONTROLLIFE_AUTORIZADOR.dbo.CTTRANS T3
              WHERE  CAST(T3.CODCLI AS INT) = C.CODCLI 
              AND T3.CPF = T.CPF
              AND ((T3.TIPTRA < 80000) or (T3.TIPTRA = 800000))
              AND (T3.CODRTA  = 'V' OR (T3.CODRTA = 'P' AND T3.PROCESSADA = 'N'))), 0)
    ) AS TOT_VALTRA

    ela tem valor 100 reais e pouco.

    a outra de fora são de cartões que foram cancelados e essa de cima são as transações em aberto.

    Quando eu faço ela separa com um determinado cpf ela me retorna os valores corretos, quando coloco ela dentro da outra consulta, ai que ela me da null, pq acho que estou colocando as condições do where errado e não estou sabendo como resolver

    • Marcado como Resposta Giovani Cr segunda-feira, 31 de março de 2014 19:52
    • Não Marcado como Resposta Giovani Cr segunda-feira, 31 de março de 2014 19:52
    sexta-feira, 28 de março de 2014 20:10
  • Deleted
    • Marcado como Resposta Giovani Cr segunda-feira, 31 de março de 2014 19:52
    sexta-feira, 28 de março de 2014 21:54