none
Consulta com Variável RRS feed

  • 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

    quinta-feira, 21 de março de 2013 02:33

Respostas

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

    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

    quinta-feira, 21 de março de 2013 10:42
  • 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

    quinta-feira, 21 de março de 2013 11:42
  • Gapimex,

    Agradeço a ajuda! Deu certo.

    Sds,

    Efraim.


    Efraim Raizer

    quinta-feira, 21 de março de 2013 20:32