Ir para conteúdo
Fórum Script Brasil
  • 0

Soma Sql


WesSouza

Pergunta

11 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...