Fazer uma busca agrupando e contando status diferentes

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

Yag

Tu quer qu aconteça isto ?:

Fulano A >> Responsavel por isso
Fulano B >> Responsavel por isso

Só que não está acontecendo er ?

Se minha interpretação estiver certa, acho que tu tem que usar for ;
Mas espera alguem com mais conhecimento responder ;

R

digamos assim, minha tabela de resgates eh essa aqui:

id / Responsavel / Status
0 / 2 / 1
1 / 2 / 1
2 / 3 / 2
3 / 3 / 1
4 / 4 / 1
5 / 4 / 2

Digamos que status 1=pendente e 2=concluido

queria uma lista com o seguinte resultado:

respl / Qtde Pendentes / Qtde Concluidos
2 / 2 / 0
3 / 1 / 1
4 / 1 / 1

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

R

nada? =/

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