Como fazer sum case no criteria?

1 resposta
contrabando

Fala povo...

como fazer "sum if" ou "sum case" ?

eu queria fazer essa consulta com criteria:
select cli.codigo, cli.razao_social,
AVG(pe.quantidade) as mediaPecas,
sum(case when pe.status = 'F' then 1 end) as pedidosFaturados,
sum(pe.quantidade_faturada) as quantidadeFaturada,
sum(pe.valor_faturado) as valorFaturado,
AVG(pe.valor_liquido) as mediaValor
from clientes cli
inner join pedido pe on pe.cliente = cli.codigo
where pe.data_emissao BETWEEN '01/01/2009' AND '31/10/2009'
GROUP BY cli.codigo, cli.razao_social
estou fazendo assim:
Criteria criteria = ComandoUtil.getSession(schema).createCriteria(Pedido.class);
		criteria.add(Restrictions.between("dataEmissao", dataInicial, dataFinal));
		criteria.createCriteria("cliente", "c");
		criteria.add(Restrictions.eq("c.codigo", codigoCliente));
		
		ProjectionList projList = Projections.projectionList();
		projList.add(Projections.count("status"));
		projList.add(Projections.avg("quantidade"), "mediaPecas");
		projList.add(Projections.sum("quantidadeFaturado"));
		projList.add(Projections.sum("valorFaturado"));
		projList.add(Projections.avg("valorLiquido"), "mediaValor");
		
		criteria.setProjection(projList);
o que não estou conseguindo é essa parte: sum(case when pe.status = 'F' then 1 end) as pedidosFaturados

como fazer? ou vcs tem uma opção melhor?

1 Resposta

Kleber-rr

Eae, conseguiu resolver??

Criado 3 de dezembro de 2009
Ultima resposta 13 de fev. de 2010
Respostas 1
Participantes 2