Qual a lógica para montar o relatório com os dados retornados da SQL!

Conforme sugestões bem dadas, estou editando este tópico, pra ver se fica fácil de entender minha dúvida;
Minha dúvida não é no java em si, isso eu entendo, é que ta me faltando lógica para fazer isto.

Primeiramente vejamos os dados que tenho

CONSULTA 1: (Retorna entradas e saidas)

SELECT COUNT(m.id) as total, tm.nome as movimentacao, tm.id as idMovimentacao, e.nome as equipe, e.id as idEquipe, i.nome as instancia, i.id as idInstancia FROM movimentacoes m RIGHT JOIN tipomovimentacoes tm ON tm.id = m.idMovimentacao AND m.dataHora BETWEEN "2010-09-01" AND "2010-09-30" AND m.idMovimentacao IN (1,14) RIGHT JOIN equipes e ON m.idEquipe = e.id RIGHT JOIN instancias i ON i.id = m.idInstancia GROUP BY i.nome, e.nome, tm.nome
RETORNA:

CONSULTA 2: (Retorna SALDO FINAL)

SELECT COUNT(m.id) as saldoTotal, tm.nome as movimentacao, tm.id as idMovimentacao, e.nome as equipe, e.id as idEquipe, i.nome as instancia, i.id as idInstancia FROM movimentacoes m RIGHT JOIN tipomovimentacoes tm ON tm.id = m.idMovimentacao AND m.idMovimentacao NOT IN (14) RIGHT JOIN equipes e ON m.idEquipe = e.id RIGHT JOIN instancias i ON i.id = m.idInstancia GROUP BY i.nome, e.nome, tm.nome
RETORNA:

Tudo isso para gerar esse relatório:
RELATÓRIO:

EXPLICANDO O RELATÓRIO:

  • PRIMEIRA COLUNA:
    A primeira coluna lista as EQUIPES, dentro de cada INSTANCIA;
  • SEGUNDA COLUNA:
    Lista o total quando a movimentação é ENTRADA
  • TERCEIRA COLUNA:
    Lista o total quando a movimentação é Saída de Análise.
  • QUARTA E QUINTA COLUNAS PODEMOS PULAR
  • SEXTA COLUNA:
    Utiliza a segunda consulta, pois retorna o saldo Total.

As tabela eu vou gerar um HTML,

e tals, mas não precisa se preocupar com isso, preciso só da logica pra criar as linhas e colunas e tals… sendo dentro de um array ou algo do tipo.

Grato

Sexta-feira povo fica light… hehe

Incrível, será que é difícil mesmo, pensei que eu estava em um problema de lógica tola que eu não consegui…

Acho que mais ninguém conseguiu também!! :shock:

Cara, não sei os outros, mas eu não to entendendo o que tu queres mesmo…

Quanto ao tópico de Lógica lá no OFF. Não precisa apelar pra fazerem o trabalho por você e tenha paciência aqui… Quando aparecer um que entendeu sua dúvida, se puder (porque é voluntário), vai lhe ajudar…

No mais… explica melhor aí o que queres realmente e posta o que já fez de código Java

Flws 8)

Na verdade, também não entendi nada quando li o tópico.
Sempre que for upar um tópico, pense com carinho em complementá-lo com mais informações, ao invés de simplesmente postar qualquer bobagem aleatória.

PS: Escrever “DESAFIO” no título do tópico é também uma prática tosca, desaconselhada aqui no GUJ. Não faça sua dúvida parecer algo divertido ou instigante, como se fosse um defafio de lógica matemática, ou algum outro passa-tempo.

Modifiquei o POST, o título e tentarei não fazer comentários que jogue a dúvida pra cima caso ela não seja respondida por ninguém.

Thanks

Como é obtido o valor da coluna 2? É a soma de alguma coisa?
Aquele total é total do que?

[quote=ViniGodoy]Como é obtido o valor da coluna 2? É a soma de alguma coisa?
Aquele total é total do que?[/quote]

é a contagem do total de movimentações cujo o tipo da movimentação seja do tipo 1,(tipo 1 ou outros, depende do passado na SQL) dentro de um período de tempo.
A terceira coluna é exatamente a mesma coisa, só que com outro tipo de movimentação, que caracteriz saída.

Sacou?

você já desenvolveu algum código ??? Põe aí pra gente dar uma olhada no que já andou…

Abs 8)

[quote=adriano_si]você já desenvolveu algum código ??? Põe aí pra gente dar uma olhada no que já andou…

Abs 8)[/quote]

Agora no finalzinho da tarde deu uma andada, até que enfim…

[code]public void gerar(String dataInicio, String dataFim, String entradas, String saidas){

	PreparedStatement pst = null;
	
	String sql = null;
	try {
		//
		// == SELECIONANDO ENTRADAS ==
		//
		sql = " SELECT COUNT(m.id) as total, " + 
					" tm.nome as movimentacao, tm.id as idTipoMovimentacao, " +
					" e.nome as equipe, e.id as idEquipe, " +
					" i.nome as instancia, i.id as idInstancia " +
				" FROM movimentacoes m " +
					" RIGHT JOIN tipomovimentacoes tm ON tm.id = m.idMovimentacao " +  
						" AND m.dataHora BETWEEN ? AND ? " +
						" AND m.idMovimentacao IN ("+entradas+","+saidas+") " +
					" RIGHT JOIN equipes e ON m.idEquipe = e.id " +
					" RIGHT JOIN instancias i ON i.id = m.idInstancia " +
				" GROUP BY i.nome, e.nome, tm.nome " +
				" ORDER BY i.id "; 
					
		
		pst = this.getConnection().prepareStatement(sql);
		pst.setString(1, dataInicio);
		pst.setString(2, dataFim);

// pst.setInt(3, entradas+","+saidas);

		pst.execute();
		ResultSet rs = pst.getResultSet();
		
		HashMap<String , HashMap<String , RelatorioGeralVO>> instancias = new HashMap<String , HashMap<String , RelatorioGeralVO>>();
		while (rs.next()) {
			// == 
			// == CRIANDO CASO NÃO ETEJA CRIADO AINDA, PRA NÃO DAR EXCPTION ==
			// ==
			// se nao tiver instancia ainda
			if(instancias.get(rs.getString("instancia")) == null)
				instancias.put(rs.getString("instancia"), new HashMap<String, RelatorioGeralVO>());
			// se nao tiver a instancia dentro da instancia
			if(instancias.get(rs.getString("instancia")).get(rs.getString("instancia")) == null)
				instancias.get(rs.getString("instancia")).put(rs.getString("instancia"), new RelatorioGeralVO());
			// se nao tiver equipe ainda
			if(instancias.get(rs.getString("instancia")).get(rs.getString("equipe")) == null)
				instancias.get(rs.getString("instancia")).put(rs.getString("equipe"), new RelatorioGeralVO());
			
			// == 
			// == BUSCANDO PARA COLOCAR OS DADOS DA EQUIPE ==
			// ==	
			//atualiza o objeto dentor dela
			HashMap<String , RelatorioGeralVO> equipesAux = instancias.get(rs.getString("instancia"));
			RelatorioGeralVO aux = equipesAux.get(rs.getString("equipe"));
			aux.setNome(rs.getString("equipe"));
			//testando se é entrada ou saida
			if(rs.getString("idTipoMovimentacao") != null){
				if(rs.getString("idTipoMovimentacao").equalsIgnoreCase(entradas)){
					aux.setEntradas(rs.getInt("total"));
				}else if(rs.getString("idTipoMovimentacao").equalsIgnoreCase(saidas)){
					aux.setSaidas(rs.getInt("total"));
				}
			}else{
				aux.setSaidas(0);
				aux.setEntradas(0);
			}
			equipesAux.put(rs.getString("equipe"), aux);
			instancias.put(rs.getString("instancia"), equipesAux);
			
			// == 
			// == BUSCANDO PARA COLOCAR OS DADOS DA INSTANCIA ==
			// ==	
			//atualiza o objeto dentor dela
			HashMap<String , RelatorioGeralVO> instanciaAux = instancias.get(rs.getString("instancia"));
			RelatorioGeralVO aux2 = instanciaAux.get(rs.getString("instancia"));
			aux2.setNome(rs.getString("instancia"));
			//testando se é entrada ou saida
			if(rs.getString("idTipoMovimentacao") != null){
				if(rs.getString("idTipoMovimentacao").equalsIgnoreCase(entradas)){
					aux2.setEntradas(rs.getInt("total"));
				}else if(rs.getString("idTipoMovimentacao").equalsIgnoreCase(saidas)){
					aux2.setSaidas(rs.getInt("total"));
				}
			}else{
				aux2.setSaidas(0);
				aux2.setEntradas(0);
			}
			instanciaAux.put(rs.getString("equipe"), aux2);
			instancias.put(rs.getString("instancia"), instanciaAux);
		}			
		
		for (HashMap<String, RelatorioGeralVO> hash : instancias.values()) {
			for (RelatorioGeralVO vo : hash.values()) {
				System.out.println(vo.getNome()+" Entradas: "+vo.getEntradas()+" Saidas: "+vo.getSaidas());
			}
		}

// pst.close();
rs.close();
} catch (SQLException e) {
e.printStackTrace();
System.err.println(“Erro ao listar do banco de dados: " + e.getStackTrace() +”\n" +
"SQL: " + pst.toString());
}

}	[/code]

É o que eu tenho por enquanto, ta gerando essa saída ja…

Trad Entradas: 2 Saidas: 1 Mais 1 Entradas: 1 Saidas: 1 Trad Entradas: 3 Saidas: 1 Mais 1 Entradas: 1 Saidas: 1 null Entradas: 0 Saidas: 0

Abs