Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

MarKteus

Como gerar uma coluna extra com a soma dos valores de uma coluna?

Recommended Posts

é só usar a função SUM.

Dê mais detalhes do que precisa, ou de uma pesquisada no fórum :P

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite

 

Alguém sabe como posso jogar as colunas resultado de um SELECT pra dentro de uma tabela temporária ? para depois dar um SUM em um campo ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

MarKteus, vamos botar a casa em ordem? rs :P

 

 

o que você precisa? qual a versao do SQL? pode postar a estrutura ou o resultado esperado?

 

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

MarKteus, vamos botar a casa em ordem? rs :P

 

 

o que você precisa? qual a versao do SQL? pode postar a estrutura ou o resultado esperado?

 

Abçs

 

Sim claro vamos lá

 

select ped.CodPedido,

ped.dataPedido,

ped.Descricao,

pro.strMarca,

pro.Preco * tbc.intQuantidade AS Total,

tbc.Frete

From TB_PEDIDOS ped (NOLOCK)

Inner Join TB_CESTA tbc (NOLOCK) ON ped.codCesta = tbc.codCesta

Inner Join TB_PRODUTO pro (NOLOCK) ON pro.strCodigo = tbc.strCodigo

Where ((@CodPedido is null) or (ped.CodPedido = @CodPedido))

Order by ped.CodPedido

 

Preciso dar um SUM no campo pro.Preco, já tentei utilizar o GROUP BY (abaixo) porém está dando um erro

 

select ped.CodPedido,

ped.dataPedido,

ped.Descricao,

pro.strMarca,

SUM(pro.Preco) * tbc.intQuantidade AS Total,

tentei também SUM(pro.Preco * tbc.intQuantidade) AS Total,

e tentei também SUM(Total),

tbc.Frete

From TB_PEDIDOS ped (NOLOCK)

Inner Join TB_CESTA tbc (NOLOCK) ON ped.codCesta = tbc.codCesta

Inner Join TB_PRODUTO pro (NOLOCK) ON pro.strCodigo = tbc.strCodigo

Where ((@CodPedido is null) or (ped.CodPedido = @CodPedido))

Order by ped.CodPedido

GROUP BY ped.CodPedido

 

depois tentei

GROUP BY pro.CodProduto que é o cod la na tb_Produto

mas também nada

 

Como resolver esta questão ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O group deve ter TODOS os campos do select, o ORDER deve vir após.

 

select ped.CodPedido,
ped.dataPedido,
ped.Descricao,
pro.strMarca,
SUM(pro.Preco) * tbc.intQuantidade AS Total,
tentei também SUM(pro.Preco * tbc.intQuantidade) AS Total,
e tentei também SUM(Total),
tbc.Frete
From TB_PEDIDOS ped (NOLOCK)
Inner Join TB_CESTA tbc (NOLOCK) ON ped.codCesta = tbc.codCesta
Inner Join TB_PRODUTO pro (NOLOCK) ON pro.strCodigo = tbc.strCodigo
Where ((@CodPedido is null) or (ped.CodPedido = @CodPedido))
GROUP BY ped.CodPedido,
ped.dataPedido,
ped.Descricao,
pro.strMarca
Order by ped.CodPedido

Compartilhar este post


Link para o post
Compartilhar em outros sites

O group deve ter TODOS os campos do select, o ORDER deve vir após.

 

select ped.CodPedido,
ped.dataPedido,
ped.Descricao,
pro.strMarca,
SUM(pro.Preco) * tbc.intQuantidade AS Total,
tentei também SUM(pro.Preco * tbc.intQuantidade) AS Total,
e tentei também SUM(Total),
tbc.Frete
From TB_PEDIDOS ped (NOLOCK)
Inner Join TB_CESTA tbc (NOLOCK) ON ped.codCesta = tbc.codCesta
Inner Join TB_PRODUTO pro (NOLOCK) ON pro.strCodigo = tbc.strCodigo
Where ((@CodPedido is null) or (ped.CodPedido = @CodPedido))
GROUP BY ped.CodPedido,
ped.dataPedido,
ped.Descricao,
pro.strMarca
Order by ped.CodPedido

 

 

Valeu Motta mais mesmo assim não funciona, pois nem todos os campos são coincidentes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se é isto mas se pode somar os campos da tabela

 

SELECT COD,SUM(CAMPO1 + CAMPO2) SOMA
FROM TABELA
GROUP BY COD

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se é isto mas se pode somar os campos da tabela

 

SELECT COD,SUM(CAMPO1 + CAMPO2) SOMA
FROM TABELA
GROUP BY COD

 

No seu exemplo você está somando um campo com outro, mais eu necessito da somatória do mesmo campo:

pro.Preco * tbc.intQuantidade AS Total

e depois Total+Total será que funcionaria ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

seria sum(pro.Preco * tbc.intQuantidade) as total

 

veja apenas se os campos tem os mesmos tipos pois pode ocorrer algum erro na conversão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

seria sum(pro.Preco * tbc.intQuantidade) as total

 

veja apenas se os campos tem os mesmos tipos pois pode ocorrer algum erro na conversão.

 

 

Realmente não dá certo a quantidade campos (oriundos de 3 tables) inviabiliza a somatória, pois a cláusula GROUP BY se perde.

 

Mesmo assim obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

1) Não está gerando um produto cartesiano indevido ?

 

Faça um teste, faça a query sem Group, gere o resultado numa planilha excel e veja se o somatório fica correto.

Veja se não existe duplicidade indevida e se for o caso corriga a query.

 

Em último caso tente : Sum(distinct pro.Preco * tbc.intQuantidade) as total

 

Mas verifique a query

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só pra você entender melhor coloquei na abertura do post somente um exemplo da query, na verdade ela é bem maior. Ela deve retornar mais + ou - menos uns 15 campos e pelo que sei segundo alguns testes o SUM e o Group precisam que todos os campos tenham valores iguais para que possam ser utilizados no GROUP BY, ou seja, mesmo que os campos Cod, Data sejam iguais os outros campos tbm precisaram e está muito dificil de todos os campos coincidirem, então ao encontrar um campo com valor diferente além do retorno me trazer linhas duplicadas traz sem a somatória.

 

Mesmo assim realizarei o teste que você me propôs a titulo de aprendizado, mas já estou me conformando em ter que criar tables temporárias. e liga-las com INNER JOIN

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porque você não cria uma procedure? Nela, você monta sua tabela temporária que terá todos os pedidos, depois faz querys a partir desta tabela temporária, captura os valores das colunas que precis para montar sua soma e atualiza as colunas correspondentes na temp, um pedido por vez, e no fim simplesmente faz um select e soma/multiplica os valores da temp e joga como saída da procedure? É mais simples e provavelmente muito mais fácil de controlar via procedure que tentar por tudo num select só se a situação envolve tantas tabelas e valores.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porque você não cria uma procedure? Nela, você monta sua tabela temporária que terá todos os pedidos, depois faz querys a partir desta tabela temporária, captura os valores das colunas que precis para montar sua soma e atualiza as colunas correspondentes na temp, um pedido por vez, e no fim simplesmente faz um select e soma/multiplica os valores da temp e joga como saída da procedure? É mais simples e provavelmente muito mais fácil de controlar via procedure que tentar por tudo num select só se a situação envolve tantas tabelas e valores.

 

[]'s

 

 

Chrnos

 

Foi + ou - assim que fiz, na verdade eu queria mesmo era evitar a criação de tables TEMP, mas ñ teve jeito.

 

Mesmo assim obrigado pelas sugestões de todos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.