Dúvida sobre como realizar um tipo de consulta agrupando e contando

4 respostas
R

Como fazer uma busca assim, usando criteria?

Tenho uma classe de Resgates

nessa classe, tenho quem foi o responsável pelo resgate, o responsável deste responsável, e qual status do resgate (ex: 1 - pendente; 2 - concluido).

Se eu quisesse fazer uma busca para agrupar todos os responsáveis em uma posição, e nas outras, a contagem da incidência dos pendentes e dos concluídos, como eu poderia fazer?

Pq atualmente eu faço assim:

public List<Resgates> contaPendencias() {
		Criteria criterio = getSession().createCriteria(Resgates.class)
				.add(Restrictions.ne("statusAtual", Long.parseLong("99")))	//concluídos
				.add(Restrictions.ne("statusAtual", Long.parseLong("98")))	//cancelados
				.add(Restrictions.ne("statusAtual", Long.parseLong("97")))	//iniciado
				.add(Restrictions.ne("statusAtual", Long.parseLong("96")))	//devolvido
				.add(Restrictions.ne("statusAtual", Long.parseLong("100")))	//contabilizar
				.add(Restrictions.ne("statusAtual", Long.parseLong("101")));	//exportado
		ProjectionList list = Projections.projectionList();
		list.add(Projections.groupProperty("ujaResp"), "nomeDaUja");
		list.add(Projections.count("ujaResp"), "quantidadePendencias");
		criterio.setProjection(list);
		criterio.setResultTransformer(new AliasToBeanConstructorResultTransformer(ContaPendencias.class.getConstructors()[0]));
		return criterio.list();
	}
e a classe ContaPendencias:
private final Object nomeDaUja;  	//na verdade vem o prefixo 
    private final Object quantidadePendencias;  
      
    public ContaPendencias(Object nomeDaUja, Object quantidadePendencias) {  
        this.nomeDaUja = nomeDaUja;  
        this.quantidadePendencias = quantidadePendencias;  
    }

	public Object getNomeDaUja() {
		return nomeDaUja;
	}

	public Object getQuantidadePendencias() {
		return quantidadePendencias;
	}

Ai me vem um arraylist de objetos preenchidos em [0] e [1] mas não consigo separar por cada tipo de status em seu respectivo responsável

4 Respostas

R

o SQL da minha busca seria esse:

select
Responsavel,
sum(case status when 1 then 1 else 0 end) as Pendentes,
sum(case status when 2 then 1 else 0 end) as Concluidos
from Tabela
group by Responsavel

Hebert_Coelho

rmaragno:
o SQL da minha busca seria esse:

select
Responsavel,
sum(case status when 1 then 1 else 0 end) as Pendentes,
sum(case status when 2 then 1 else 0 end) as Concluidos
from Tabela
group by Responsavel


Esse é a solução ou é uma consulta que você tentou fazer e não foi?

Você poderia fazer assim:

select count(0), statusAtual from Resgates where .... group by status

R

funciona no MYSQL

select Responsavel, sum(case statusAtual when 1 then 1 else 0 end) as Pendentes, sum(case statusAtual when 2 then 1 else 0 end) as Concluidos from Resgates group by Responsavel

O problema, que eu não sei como fazer isso no hibernate… nem com criteria API nem de outra forma.

R

alguem?

Criado 7 de janeiro de 2012
Ultima resposta 10 de jan. de 2012
Respostas 4
Participantes 2