Select groupby

3 respostas
R

Olá tenho uma tabela com dados mais ou menos dessa forma:

Item 5 $ 100,00
Item 1 $ 10,99
Item 3 $ 20,00
Item 4 $ 31,50
Item 3 $ 56,99
Item 1 $ 45,00
Item 4 $ 29,00

preciso recuperar atraves de um select a soma de cada item sem repiti-los
dessa forma:

Item 1 $ 55,99
Item 3 $ 76,99
Item 4 $ 60,50
Item 5 $ 100,00

então criei um metodo mas algo da errado:java.sql.SQLException: Column not found

Já verifiquei todos os nomes das colunas da tabela etc... esta tudo certo...mas não funciona...
Alguem sabe oque pode ser?? Grato!!

Segue o metodo que estou usando:
public LinkedList listaPercentual(int id, String dataInicial, String dataFinal) throws SQLException {          
           conn = retornaConn();            
           PreparedStatement stmt = null           
          LinkedList percentual  = new LinkedList();                                       
           double totalGeral = totalGeralDespesas;
           
                      
        try {				
                                                                       
           stmt = conn.prepareStatement ("select CodOperacao, sum(Valor) from Tab_Extrato where Data between ? and ? and RecDesp = 1 and CodUsuario LIKE '%" + id + "%' group by CodOperacao");

           stmt.setString(1, dataInicial);
           stmt.setString(2, dataFinal);
          
           ResultSet rs = stmt.executeQuery();
          
           while (rs.next()) { 
               
                ExtratoBean extratoBean = new ExtratoBean();                  
                 
                 extratoBean.setCodOperacao(rs.getInt("CodOperacao"));
                
                 extratoBean.setValor(rs.getDouble("Valor"));
                                 
                 percentual.add(extratoBean);   

         System.out.println("Operação n°: "+ extratoBean.getCodOperacao()+" Soma total Gasto $ "+extratoBean.getValor() );

                                  
            }  
          rs.close();                                    
      } 
      catch (SQLException e) { 
                  System.out.println("erro ao calcular " + e); 
      } 
      finally{               
                 stmt.close();
                 conn.close();
      }     
     
     
      return percentual; 
        
    }

3 Respostas

F

é pq o nome da coluna do SUM no resultSet não vem apenas “Valor”, como vc está pegando em - rs.getDouble(“Valor”) - Ela vem como “sum(Valor)”.

ou então vc adiciona Alias no seu comando SQL. ficaria assim, pro ResultSet saber quem vc está procurando:

stmt = conn.prepareStatement ("select CodOperacao as CodOperacao, sum(Valor) as Valor from Tab_Extrato where Data between ? and ? and RecDesp = 1 and CodUsuario LIKE '%" + id + "%' group by CodOperacao");
R

então cara… desculpe a ignorancia, mas oque quer dizer “alias”?
Tentei colocandostmt = conn.prepareStatement ("select CodOperacao as CodOperacao, sum(Valor) as Valor from Tab_Extrato where Data between ? and ? and RecDesp = 1 and CodUsuario LIKE '%" + id + "%' group by CodOperacao");
mas dá o seguinte erro:
java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access] Referência circular causada pelo alias ‘CodOperacao’ na lista SELECT da definição da consulta.

E da outra forma…que acho que fiz errado:extratoBean.setValorAcumulado(rs.getDouble("sum(Valor)"));
da o erro java.sql.SQLException: Column not found
Pode me ajudar??

Grato,

Rodrigo.

R

Consegui resolver o problema!!

na verdade mudei o nome da variavel que soma o total por item e deu certo!!

stmt = conn.prepareStatement (“select CodOperacao, sum(Valor) as Valor1 from Tab_Extrato where Data between ? and ? and RecDesp = 1 and CodUsuario LIKE '%” + id + “%’ group by CodOperacao”);

Muito Obrigado!!!

Criado 30 de agosto de 2006
Ultima resposta 31 de ago. de 2006
Respostas 3
Participantes 2