DUVIDA SIMPLES SOBRE SQL

MARCOS 27/08/2010 13:33:14
#351483
Pessoal,
Tenho uma dúvida sobre função agregada no SQL Server 2005.

Se eu faço o seguinte, para pegar a última venda de cada produto:

Select Produto,Quant,Valor,Sum(Data) From Tb_VendaProd

é emitida uma mensagem de erro!

Mas,se eu faço:

Select Produto, Sum(Data) From Tb_VendaProd Group by Produto

Funciona.

A dúvida é a seguinte:

Eu posso dizer, que somente posso usar funções agregadas na clausula SELECT
se for junto com Group By? Porque o SQL, nao aceita a primeira instrução?
LROSSI 27/08/2010 13:52:32
#351487
no caso do sum() sim, ele soma os valores do campo informado, e se vc não agrupar ele não somara pq não tm o que somar... entende?
JWCELYO 27/08/2010 14:17:37
#351491
na verdade o Sum explicitamente soma a coluna inteira a não se que seja passado um filtro like ou where ou between
MARCOS 27/08/2010 15:27:23
#351495
Pessoal,
Me desculpe, na verdade a função agregada que estou usando é o MAX:

Select Produto,Quant,Valor,Max(Data) From Tb_VendaProd

é emitida uma mensagem de erro!

Mas,se eu faço:

Select Produto, MAX(Data) From Tb_VendaProd Group by Produto

Assim funciona

Eu pensei que a primeira expressão deveria funcionar, pois ele retornaria somente os registros com a Data mais recente.
Meu raciocineio esta errado?

MARCOSLING 27/08/2010 16:12:37
#351503
Resposta escolhida
Vamos pensar um pouco...
Qual é o resultado que a segunda expressão retorna? O maior data por produto, certo? Por isso que vc incluiu a cláusula Group By por produto, certo?

Agora vamos ver a primeira expressão...
Qual é o resultado que deveria retornar (que eu acho que vc está querendo)? A maior data por produto, quantidade e valor (não vejo lógica nessa expressão, mas, vamos lá), certo?
Então vc deveria incluir a cláusula Group By por produto, quantidade e valor.

O que extamente vc está querendo obter nessa query?
DIOGOMUNARIN 27/08/2010 17:00:28
#351519
Eh o seguinte, vc pode usar o SUM sem agrupar, desde que sua selecao nao contenha outro campo q nao o que esta sendo soma.
Tópico encerrado , respostas não são mais permitidas