Usuário com melhor resposta
Consulta com Variável

Pergunta
-
Prezados,
Tenho a seguinte situação:
Tabela SL1 - Cabeçalho de orçamento
Tabela SL2 - Itens do orçamento
Campo L1_VLRTOT - Valor total do orçamento
Campo L2_VLRITEM - Valor do Item do orçamento
Preciso criar uma consulta para comparar o campo L1_VLRTOT com o somatório do L2_VLRITEM, me retornando o orçamento que estiver com valor diferente.
Fiz o seguinte:
SELECT L1_NUM, L1_VLRTOT, SUM(L2_VLRITEM) as TOTL2
FROM SL1, SL2
WHERE L1_NUM=L2_NUM AND L1_VLRTOT <> (SELECT SUM (L2_VLRITEM) FROM SL2 WHERE L1_NUM=L2_NUM)
-- Essa consulta naturalmente não funciona, pois, estou comparando o valor de cada orçamento em SL1 com o somatório de todos os itens de todos os orçamentos de SL2.
O problema é que eu preciso de uma variável que guarde o numero do orçamento (campo L1_NUM) e dentro de um laço faça a consulta no SL2. O where seria assim: WHERE L1_NUM=L2_NUM AND L1_VLRTOT <> (SELECT SUM (L2_VLRITEM) FROM SL2 WHERE L1_NUM=L2_NUM AND L2_NUM=@VAR)
Alguem pode me ajudar?!
Obrigado,
Efraim.
Efraim Raizer
Respostas
-
Bom dia,
Experimente dessa forma:
SELECT L1_NUM, L1_VLRTOT, SUM(L2_VLRITEM) as TOTL2 FROM SL1 INNER JOIN SL2 ON L1_NUM = L2_NUM GROUP BY L1_NUM, L1_VLRTOT HAVING SUM(L2_VLRITEM) <> L1_VLRTOT
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Sugerido como Resposta Samuel Rodrigues dos Anjos quinta-feira, 21 de março de 2013 16:56
- Marcado como Resposta Efraim Raizer quinta-feira, 21 de março de 2013 20:31
Todas as Respostas
-
Cara,
Para declarar uma variável você pode utilizar a seguinte sintaxe:
DECLARE @VARIAVEL INT
Para setarmos um valor para ela:
SET @VARIAVEL = (SELECT COUNT(*) FROM TABELA)
E para utilizar um loop:
WHILE @VARIAVEL > 0 BEGIN
....
SET @VARIAVEL = @VARIAVEL - 1 END
Atenciosamente, Samuel dos Anjos
- Sugerido como Resposta Samuel Rodrigues dos Anjos quinta-feira, 21 de março de 2013 05:35
-
Samuel, obrigado pela ajuda.
NEsse caso, precisarei percorrer a tabela SL1 e dentro desse laço que percorre a tabela terei que avaliar os registros da SL2. Sendo assim, como faço para "abrir a teabela" e percorrer os registros, um a um?
Sds,
Efraim.
Efraim Raizer
-
Bom dia,
Experimente dessa forma:
SELECT L1_NUM, L1_VLRTOT, SUM(L2_VLRITEM) as TOTL2 FROM SL1 INNER JOIN SL2 ON L1_NUM = L2_NUM GROUP BY L1_NUM, L1_VLRTOT HAVING SUM(L2_VLRITEM) <> L1_VLRTOT
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Sugerido como Resposta Samuel Rodrigues dos Anjos quinta-feira, 21 de março de 2013 16:56
- Marcado como Resposta Efraim Raizer quinta-feira, 21 de março de 2013 20:31
-