Jump to content
Fórum Script Brasil
  • 0

Soma Sql


WesSouza

Question

11 answers to this question

Recommended Posts

  • 0
Boa tarde WesSouza,

você pode utilizar a funçao SUM no valor que deseja somar e fazer o agrupamento pelo cod_processo.

Exatamente o que eu consegui fazer...

Porem eu gostaria que aparece o Total referente ao Depositante e o Total Geral de acordo com /Cod em que o Depositante depositou EX:

Cod Depositante Valor

123 Joao 100,00

- - 110,00

- - 210,00 Total

- Jose 55,00

- - 60,00

105,00 Total

315,00 Total Geral no Cod 123

Obrigado pela ajuda

Link to comment
Share on other sites

  • 0

Deste jeito terá que fazer 2 selects. Um agrupando pelo depositante e outro agrupando pelo Cod.

Outra alternativa é executar a primeira soma já criando uma temporária, e depois realizar a soma novamente a partir da mesma.

Espero que ajude!! :.)

Link to comment
Share on other sites

  • 0
Deste jeito terá que fazer 2 selects. Um agrupando pelo depositante e outro agrupando pelo Cod.

Outra alternativa é executar a primeira soma já criando uma temporária, e depois realizar a soma novamente a partir da mesma.

Espero que ajude!! :.)

Sim Entendi o seu ponto de vista mas voce teria algum exemplo prático para eu não me confundir no Codigo?

Obrigado!

Link to comment
Share on other sites

  • 0

Sim, sem problemas....

Teoricamente está bem simples os selects. Mas o que vai diferenciar o uso de um ou de outro será mesmo a complexidade do select e dos dados de retorno em si. As vezes trabalhar passo a passo (criando temporárias) fica mais fácil o entendimento e manutenção. Segue o exemplo das duas formas que falei:

--criação da tabela
create table #Dados (Cod int, Depositante VARCHAR(10), Valor INT)

--inserção dos dados
INSERT INTO #Dados VALUES (123, 'Joao', 100)
INSERT INTO #Dados VALUES (123, 'Joao', 110)
INSERT INTO #Dados VALUES (123, 'Jose', 55)
INSERT INTO #Dados VALUES (123, 'Jose', 60)

-- 2 selects
SELECT Depositante, SUM(Valor) FROM #Dados GROUP BY Depositante
SELECT Cod, SUM(Valor) FROM #Dados GROUP BY Cod

--utilizando uma temporária
SELECT Depositante, SUM(Valor) Valor into #TabelaTemporaria FROM #Dados GROUP BY Depositante

-- verificação da tabela criada
SELECT * FROM #TabelaTemporaria

-- realizando a soma
SELECT SUM(valor) FROM #TabelaTemporaria

Link to comment
Share on other sites

  • 0
Sim, sem problemas....

Teoricamente está bem simples os selects. Mas o que vai diferenciar o uso de um ou de outro será mesmo a complexidade do select e dos dados de retorno em si. As vezes trabalhar passo a passo (criando temporárias) fica mais fácil o entendimento e manutenção. Segue o exemplo das duas formas que falei:

--criação da tabela
create table #Dados (Cod int, Depositante VARCHAR(10), Valor INT)

--inserção dos dados
INSERT INTO #Dados VALUES (123, 'Joao', 100)
INSERT INTO #Dados VALUES (123, 'Joao', 110)
INSERT INTO #Dados VALUES (123, 'Jose', 55)
INSERT INTO #Dados VALUES (123, 'Jose', 60)

-- 2 selects
SELECT Depositante, SUM(Valor) FROM #Dados GROUP BY Depositante
SELECT Cod, SUM(Valor) FROM #Dados GROUP BY Cod

--utilizando uma temporária
SELECT Depositante, SUM(Valor) Valor into #TabelaTemporaria FROM #Dados GROUP BY Depositante

-- verificação da tabela criada
SELECT * FROM #TabelaTemporaria

-- realizando a soma
SELECT SUM(valor) FROM #TabelaTemporaria
Muito Obrigado Estava buscando um exemplo para tentar modificar o meu scrpt, que exiba alem do Total de cada depositante_deposito Total Geral de acordo com o cod_processo, no seu exemplo só acontece um total, de uma olhada na imagem fica mais claro a minha duvida... http://social.msdn.microsoft.com/Forums/getfile/72714
;with cte_teste as( select depositante_deposito , cod_processo,sum(valor_deposito) as valor_deposito ,data_vencimento_deposito,guia_deposito, id_deposito, cod_mandado, cod_guia_deposito  

from deposito group by rollup( depositante_deposito, cod_processo, data_vencimento_deposito, guia_deposito, id_deposito, cod_mandado, cod_guia_deposito)), Base as ( select depositante_deposito , cod_processo,valor_deposito ,data_vencimento_deposito,guia_deposito, id_deposito, cod_mandado, cod_guia_deposito

,row_number() over  (partition by depositante_deposito order by depositante_deposito,cod_processo) numerador ,row_number() over  (partition by cod_processo order by cod_processo,depositante_deposito)numerador2 from cte_teste

WHERE(depositante_deposito Is Not null And cod_processo Is Not null And guia_deposito Is Not null And id_deposito Is

Not null And cod_mandado Is Not null And cod_guia_deposito Is Not null) or (depositante_deposito is not null and

cod_processo is not null and guia_deposito is null and id_deposito is null and cod_mandado is null and cod_guia_deposito is null and data_vencimento_deposito is null)) select case when numerador =1 then depositante_deposito else '' end as Nome,case when numerador2 =1 then cod_processo  else '' end as cod_processo,valor_deposito ,data_vencimento_deposito,guia_deposito ,id_deposito ,cod_mandado,cod_guia_deposito

from Base

Bom Se voce tiver sugestões Agradeço !!

Link to comment
Share on other sites

  • 0

Vi a imagem em anexo... mas não entedi uma coisa: nas colunas Nome e Cod_Processo há campos em branco? No exemplo que passsei, não existem campos em branco. Por isso que o resultado sai ok.

Se a sua base estiver da forma que postou na imagem, não terá jeito de fazer da forma que passei....

você terá que criar um loop para ir somando os campos, até encontrar um campo que tenha um nome diferente do q está somandom.

Link to comment
Share on other sites

  • 0
Vi a imagem em anexo... mas não entedi uma coisa: nas colunas Nome e Cod_Processo há campos em branco? No exemplo que passsei, não existem campos em branco. Por isso que o resultado sai ok.

Se a sua base estiver da forma que postou na imagem, não terá jeito de fazer da forma que passei....

você terá que criar um loop para ir somando os campos, até encontrar um campo que tenha um nome diferente do q está somandom.

Esses campos tem espaços em Branco Porque pelo Meu script fiz com que eles não aparececem para não repetir dados iguais somente nessas colunas para uma melhor vizualização quando Colado em um relátorio...

E esse loop teria que checar o campo Cod_processo para realizar a soma e exibir o Total Geral dos Depositos do Nome, pois o importante é saber o Tatal Geral de Cada diferente Cod _processo...

Talves eu tenha que reconstruir meu scrpt mas não saberia como aplicar todas as condições que preciso..

Mas em um primeiro momento Eu precisaria de uma exemplo desse Loop que voce comentou

Muito Obrigado mesmo pela ajuda!

Link to comment
Share on other sites

  • 0

Boa tarde WesSouza,

Ficaria mais fácil você alterar o script e visualizar todos os dados de retorno....

Segue um exemplo com o loop:

-- criando tabela
create TABLE #Dados (id int identity, nome VARCHAR(15), valor int)

-- inserindo dados
INSERT INTO #Dados VALUES ('Elisabeth', 2443)
INSERT INTO #Dados VALUES ('', 2443)
INSERT INTO #Dados VALUES ('', 2443)
INSERT INTO #Dados VALUES ('', 2443)
INSERT INTO #Dados VALUES ('Rota', 1000)
INSERT INTO #Dados VALUES ('', 1000)
INSERT INTO #Dados VALUES ('', 1000)
INSERT INTO #Dados VALUES ('', 1000)

-- fazendo a somatória - selecionar até o final e executar
DECLARE @Cont INT
DECLARE @Nome VARCHAR(15)
DECLARE @SubTotal INT
DECLARE @Total INT

SET @Cont = 1
SET @SubTotal = 0
SET @Total = 0

WHILE (@Cont <= (SELECT COUNT(nome) FROM #Dados)) 
BEGIN
    SET @Nome = (SELECT nome FROM #Dados WHERE id=@Cont)
    SET @SubTotal = @SubTotal + (SELECT valor FROM #Dados WHERE id=@Cont)
    SET @Total = @Total + (SELECT valor FROM #Dados WHERE id=@Cont)
    SET @Cont = @Cont + 1
    SET @Nome = (SELECT nome FROM #Dados WHERE id=@Cont)
    IF @Nome <> '' OR @nome IS null
    BEGIN
        PRINT @SubTotal
        SET @SubTotal = 0
    END
END
PRINT @Total

Link to comment
Share on other sites

  • 0
Boa tarde WesSouza,

Ficaria mais fácil você alterar o script e visualizar todos os dados de retorno....

Segue um exemplo com o loop:

-- criando tabela
create TABLE #Dados (id int identity, nome VARCHAR(15), valor int)

-- inserindo dados
INSERT INTO #Dados VALUES ('Elisabeth', 2443)
INSERT INTO #Dados VALUES ('', 2443)
INSERT INTO #Dados VALUES ('', 2443)
INSERT INTO #Dados VALUES ('', 2443)
INSERT INTO #Dados VALUES ('Rota', 1000)
INSERT INTO #Dados VALUES ('', 1000)
INSERT INTO #Dados VALUES ('', 1000)
INSERT INTO #Dados VALUES ('', 1000)

-- fazendo a somatória - selecionar até o final e executar
DECLARE @Cont INT
DECLARE @Nome VARCHAR(15)
DECLARE @SubTotal INT
DECLARE @Total INT

SET @Cont = 1
SET @SubTotal = 0
SET @Total = 0

WHILE (@Cont <= (SELECT COUNT(nome) FROM #Dados)) 
BEGIN
    SET @Nome = (SELECT nome FROM #Dados WHERE id=@Cont)
    SET @SubTotal = @SubTotal + (SELECT valor FROM #Dados WHERE id=@Cont)
    SET @Total = @Total + (SELECT valor FROM #Dados WHERE id=@Cont)
    SET @Cont = @Cont + 1
    SET @Nome = (SELECT nome FROM #Dados WHERE id=@Cont)
    IF @Nome <> '' OR @nome IS null
    BEGIN
        PRINT @SubTotal
        SET @SubTotal = 0
    END
END
PRINT @Total

Bom Obrigado PElo exemplo mas preciso de Todas as informções na consulta, preciso um em que mostre todos os campos e valores com o Total geral

Link to comment
Share on other sites

  • 0

Este foi um exemplo da implementação.... ai você terá q fazer as implementações devidas.

Ainda acho mais fácil retornar todos os campos no resultset.... as manipulações e implementações poderão ser realizadas via código fonte.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...