Usuário com melhor resposta
Colocar o resultado de uma consulta com union em uma variavel

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''))
Respostas
-
Deleted
- Marcado como Resposta Giovani Cr segunda-feira, 31 de março de 2014 19:52
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
- Editado Kanaãm Luz Romero Rodrigues sexta-feira, 28 de março de 2014 12:27
-
-
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
- Sugerido como Resposta Durval RamosModerator sexta-feira, 28 de março de 2014 13:37
-
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
-
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, NOMUSUEu mudei e coloquei a consulta pra trazer como uma sub consulta, so que não esta trazendo,
-
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
-
-
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
-
-
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
-
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
-
Deleted
- Marcado como Resposta Giovani Cr segunda-feira, 31 de março de 2014 19:52