Duvida com SUM

boa tarde galera tenho o seguinte codigo que deveria me retornar a soma da quantidade dos produtos, porem nao esta funcionando. como devo faser para que ele me retorne a soma ??

SELECT a.t016_codigo_entrada_t015 ,a.t016_codigo_produto_t006, a.t016_nome_produto , a.t016_qt_itens, a.t016_valor_custo , 
b.t015_cod_entrada , b.t015_data_fecha,sum(case( t016_codigo_produto_t006) when t016_codigo_produto_t006 then t016_qt_itens end  )
from gcotb016_item_ent a
inner join gcotb015_entrada_prd b
on a.t016_codigo_entrada_t015 = b.t015_cod_entrada where  b.t015_data_fecha >='2012.04.27' and b.t015_codigo_fornecedor_t005=106 and a.t016_codigo_produto_t006 in( 
4722	,
4986	,
12425	,
28319	,
24984	,
16604	,
16604	,
15694	,
15693	,
15521	,
15521	,
16298	,
25233	,
15519	,
15519	,
24509	,
24509	,
16407	,
16407	,
18397	,
14752	,
14752	,
14752	,
16456	,
16297	,
8007	,
8008	,
8009	,
8010	,
10622	,
12428	)



group by t016_codigo_entrada_t015,t016_codigo_produto_t006,t016_nome_produto,t016_qt_itens,t016_valor_custo,t015_cod_entrada,t015_data_fecha
order by t016_codigo_produto_t006
;

o retorno e assim:


https://lh5.googleusercontent.com/oudjlL1nK7fV43TeNuwkUKXaHBqks2TpVJ5_4RcWXg=w555-h207-p-no

[/url]

como na imagem os 2 primeiros sao os mesmos e gostaria de saber como poderia estar fazendo para que ele aparecessem com o valor somado =350

desde já grato pela ajuda

Você está agrupando por código, e existem códigos diferentes nos pontos onde vc apontou que deveria ter sido somado.

não entendi o que vc quis dizer. mas vou tentar ser mas claro por exemplo tenho 2 itens que com mesmo código porem foi cadastrado em NF diferente por exemplo
nota Fiscal 1 codigo -> 1 -> cadastro um caderno com codigo 5 e quantidade 10;
nota fiscal 2 codigo -> 2 -> cadastro o mesmo item com codigo 5 e quantidade 5;

como posso somar os itens com codigo->5 de tal forma que o sum me traga 15 .

Pelo visto, na sua Query, vc está trazendo o código da NF. Como são NF’s diferentes, estes valores não podem ser somados neste resultset, entende?

Você agrupa por valores iguais. Como o código da NF é diferente, ele divide os valores para código de NF diferente apresentado. Deixe de exibir o código da entrada, e remova ele do group by. Faça um teste.

poxa amigo fiz como vc disse mas nao de certo

SELECT a.t016_codigo_produto_t006, a.t016_nome_produto , a.t016_qt_itens, a.t016_valor_custo , 
 b.t015_data_fecha,sum(case( t016_codigo_produto_t006) when t016_codigo_produto_t006 then t016_qt_itens end  )
from gcotb016_item_ent a
inner join gcotb015_entrada_prd b
on t016_codigo_entrada_t015 = b.t015_cod_entrada where  b.t015_data_fecha >='2012.04.27' and b.t015_codigo_fornecedor_t005=106 and a.t016_codigo_produto_t006 in( 
4722	,
4986	,
12425	,
28319	,
24984	,
16604	,
16604	,
15694	,
15693	,
15521	,
15521	,
16298	,
25233	,
15519	,
15519	,
24509	,
24509	,
16407	,
16407	,
18397	,
14752	,
14752	,
14752	,
16456	,
16297	,
8007	,
8008	,
8009	,
8010	,
10622	,
12428	)



group by t016_codigo_produto_t006,t016_nome_produto,t016_qt_itens,t016_valor_custo,b.t015_data_fecha
order by t016_codigo_produto_t006
;

e continua a mostrar os itens sem serem somados , tens mas alguma ideia ??

Observe que na sua query ainda deve haver valores pertinentes a cada nfe, como percebi ali, a quantidade de itens, etc. Ainda tem código de entradas na t015, etc.

Deixe visível no resultset apenas o código do produto, seu nome, e seu preço.
Remova os demais

poxa então acho que e impossível,pois preciso que some a partir de tal data e esse campo de data esta em uma tabela e os valores como quantidade estão em outra tabela, por isso usei inner join e daí a necessidade de somar os campos cujo os codigos sao os mesmos.

por isso não posso Deixar visível no resultset apenas o código do produto, seu nome, e seu preço pois assim me traria uma enorme quantidade de informação tornando-a desnecessária

teria alguma forma de somar os campos em tabelas diferentes??

Brother, você pode continuar usando as colunas como critérios, fazer JOINs com as notas de entrada, etc. Só não deve exibí-las no resultset, pois elas não permitirão a agregação de valores como você quer.

amigo desculpa pela inexperiencia mas ainda nao deu certo removi deixei na querry apenas o nome codigo e quantidade e preco mas ainda nao soma ??

SELECT  sum(case( t016_codigo_produto_t006) when t016_codigo_produto_t006 then t016_qt_itens end  ),a.t016_codigo_produto_t006, a.t016_nome_produto , a.t016_qt_itens, a.t016_valor_custo
from gcotb016_item_ent a
inner join gcotb015_entrada_prd b
on t016_codigo_entrada_t015 = b.t015_cod_entrada where  b.t015_data_fecha >='2012.04.27' and b.t015_codigo_fornecedor_t005=106 and a.t016_codigo_produto_t006 in( 
4722	,
4986	,
12425	,
28319	,
24984	,
16604	,
16604	,
15694	,
15693	,
15521	,
15521	,
16298	,
25233	,
15519	,
15519	,
24509	,
24509	,
16407	,
16407	,
18397	,
14752	,
14752	,
14752	,
16456	,
16297	,
8007	,
8008	,
8009	,
8010	,
10622	,
12428	)

group by t016_codigo_produto_t006,t016_nome_produto,t016_qt_itens,t016_valor_custo
order by t016_codigo_produto_t006
;

Bom, vamos la. Imagine o seguinte:

Nota

  • ID
  • Data Venda

NotaItem

  • ID nota
  • ID produto
  • Qtde

Produto

  • ID
  • Nome
  • Preco

Uma query de exemplo:

SELECT SUM((ni.qtde*p.preco)) as soma, p.id, p.nome FROM NotaItem ni INNER JOIN Produto p ON (ni.id_produto = p.id) INNER JOIN NotaFiscal f ON (ni.id_nota = f.id)
where f.datavenda > 'data_exemplo'; GROUP by p.id, p.nome

Observe que vc pode fazer seus JOINs normalmente, mas quando você usa funções de agregação, você exibir somente coisas “agregáveis”, ou elas gerarão outras tuplas, como está acontecendo agora.

ok obrigado pela dica irei testar para ver se eu entendo e posto o resultado

vlw brother…