none
Dúvida de soma no SQL RRS feed

  • Pergunta

  • Boa noite á todos.

    Comecei a trabalhar a pouco tempo com SQL e vi em algum lugar uma soma (sem ser consulta em tabela) da seguinte forma:

    select 1+2+3+4+5+6+7+8+9+10  e o resultado foi 55  ..... Minha dúvida é a seguinte: se eu tiver 100 número para somar (de 1 até 100), sem ter que digitar 1+ até 100?Existe algum algorítimo para essa soma?

    Muito obrigado desde já!


    • Editado Edu Tavares quinta-feira, 21 de junho de 2012 21:13
    quinta-feira, 21 de junho de 2012 21:05

Respostas

  • Olá Edu,

    Eu nunca vi uma função pronta pra isso, mas eu criei uma abaixo e coloquei comentários para ficar mais fácil o entendimento:

    --DECLARO AQUI UMA VARIÁVEL PARA CONTAR E OUTRA PARA ARMAZENAR A INSTRUÇÃO DO SELECT
    DECLARE @QTDE AS INT
    DECLARE @SOMA AS VARCHAR(5000)
    
    SET @QTDE = 1
    SET @SOMA = 'SELECT '
    
    --AQUI EU FAÇO UM LOOP E VOU CONCATENANDO OS VALORES QUE EU QUERO NO SELECT
    WHILE @QTDE <= 100
    	BEGIN
    		SET @SOMA = @SOMA + CAST(@QTDE AS VARCHAR(3)) + '+'
    		SET @QTDE = @QTDE + 1
    	END
    
    --COMO A INSTRUÇÃO VAI TER UM "+" NO FINAL, EU RETIRO ELE COM A FUNÇAO SUBSTRING.
    SET @SOMA = SUBSTRING(@SOMA, 0, LEN(@SOMA))
    
    --AQUI EU DEIXEI APENAS PARA QUE VOCÊ POSSA VER O RESULTADO DO QUE FOI CONCATENADO, CONSTRUINDO A INSTRUÇÃO DO SELECT
    SELECT @SOMA
    
    --AQUI EU EXECUTO A INSTRUÇÃO QUE MONTEI (UMA STRING) E TENHO O RESULTADO DA INSTRUÇÃO SELECT
    EXECUTE(@SOMA)
    
    

    Seria interessante você trabalhar isso como uma função, caso queira reaproveitar o código com frequência.

    Qualquer dúvida basta me perguntar.

    Espero ter ajudado ao menos um pouco!

    PS: Se o post foi útil, marque-o como resposta ;-)


    Carlos Monteiro
    MCP ASP.Net C#
    twitter: @carloshkd
    http://www.vtex.com.br

    • Marcado como Resposta Edu Tavares sexta-feira, 22 de junho de 2012 11:12
    quinta-feira, 21 de junho de 2012 23:16

Todas as Respostas

  • Olá Edu,

    Eu nunca vi uma função pronta pra isso, mas eu criei uma abaixo e coloquei comentários para ficar mais fácil o entendimento:

    --DECLARO AQUI UMA VARIÁVEL PARA CONTAR E OUTRA PARA ARMAZENAR A INSTRUÇÃO DO SELECT
    DECLARE @QTDE AS INT
    DECLARE @SOMA AS VARCHAR(5000)
    
    SET @QTDE = 1
    SET @SOMA = 'SELECT '
    
    --AQUI EU FAÇO UM LOOP E VOU CONCATENANDO OS VALORES QUE EU QUERO NO SELECT
    WHILE @QTDE <= 100
    	BEGIN
    		SET @SOMA = @SOMA + CAST(@QTDE AS VARCHAR(3)) + '+'
    		SET @QTDE = @QTDE + 1
    	END
    
    --COMO A INSTRUÇÃO VAI TER UM "+" NO FINAL, EU RETIRO ELE COM A FUNÇAO SUBSTRING.
    SET @SOMA = SUBSTRING(@SOMA, 0, LEN(@SOMA))
    
    --AQUI EU DEIXEI APENAS PARA QUE VOCÊ POSSA VER O RESULTADO DO QUE FOI CONCATENADO, CONSTRUINDO A INSTRUÇÃO DO SELECT
    SELECT @SOMA
    
    --AQUI EU EXECUTO A INSTRUÇÃO QUE MONTEI (UMA STRING) E TENHO O RESULTADO DA INSTRUÇÃO SELECT
    EXECUTE(@SOMA)
    
    

    Seria interessante você trabalhar isso como uma função, caso queira reaproveitar o código com frequência.

    Qualquer dúvida basta me perguntar.

    Espero ter ajudado ao menos um pouco!

    PS: Se o post foi útil, marque-o como resposta ;-)


    Carlos Monteiro
    MCP ASP.Net C#
    twitter: @carloshkd
    http://www.vtex.com.br

    • Marcado como Resposta Edu Tavares sexta-feira, 22 de junho de 2012 11:12
    quinta-feira, 21 de junho de 2012 23:16
  • Carlos, muito obrigado. Como eu disse, comecei a trabalhar (e aprender) SQL a pouco tempo, e vou tentar aproveitar isso de alguma forma nos processos que irei criar.

    Me ajudou muito!!!

    sexta-feira, 22 de junho de 2012 11:15