Remover resultados repetidos

Tenho essa pesquisa:

"select * from ORC where STATUS like? order by EMPRESA ";

Ele seleciona os orçamentos que estão em pendencia ordenando pela empresa.

uma empresa pode ter varias pendencias, mas nem por isso pode constar mais de uma vez no resultado

oque eu faço para que no resultado não tenha nenhuma empresa repetida?

o DISTINCT funciona nesse caso? como eu posso fazer?

Use um Distinct para o campo empresa…
Isso deve resolver.

desculpe minha ignorância, mas como eu uso o Distinct?

Creio que isso funcione:

“select * from orc where status like ? group by status order by empresa;”

Testei numa tabela minha e tentei adaptar a sua. Se der certo, estude a cláusula group by.

Pesquisa Básica em Tabelas:

O comando utilizado para esta finalidade é o SELECT. Através dele existe uma extensão de possibilidades que vão desde a simples extração do conteúdo de todas as linhas e colunas de uma tabela até a união de diversas tabelas, cálculos, agrupamentos, além de ordenações e filtragem de linhas e colunas.
A sintaxe mais simples do comando SELECT é:

SELECT [DISTINCT | ALL] { * | coluna [, coluna, …]}

Onde:
Cláusula Descrição
DISTINCT: Não mostra eventuais valores repetidos de colunas.
ALL: Mostra todos os valores, mesmo que repetidos. Este é o padrão se DISTINCT não for definido.

  • : Indica que devem ser mostradas todas as colunas da tabela.
    coluna: Lista de colunas que devem ser mostradas.
    tabela: Nome da tabela em que será realizada a busca.

Dhiego tentei da forma que você disse mas não deu certo.

ficou assim:
String sql = “select * from ORC where STATUS like? group by STATUS order by EMPRESA” ;

mas agora não retorna nada

Bom dia…
O comando DISTINCT é utilizado quando se deseja ignorar registros repetidos. Exemplo:

assim está funcionando só que ele repete varias vezes o nome da empresa (isso porque cada empresa tem vários orçamentos ou seja, vários Status)

"select * from ORC where STATUS like? order by EMPRESA "

como eu coloco o comando DISTINCT para não repetir a EMPRESA ?

[quote=rick18pr]Dhiego tentei da forma que você disse mas não deu certo.

ficou assim:
String sql = “select * from ORC where STATUS like? group by STATUS order by EMPRESA” ;

mas agora não retorna nada[/quote]

Quais são os tipos de status que vc tem?

Tipo os status são:

Enviar solicitação de orçamento, Aguardando orçamento, Finalizado

na tabela esta como varchar

[quote=rick18pr]assim está funcionando só que ele repete varias vezes o nome da empresa (isso porque cada empresa tem vários orçamentos ou seja, vários Status)

"select * from ORC where STATUS like? order by EMPRESA "

como eu coloco o comando DISTINCT para não repetir a EMPRESA ?[/quote]

Não tem como se cada empresa tiver vários orçamentos (que é o que você mesmo disse).

Se quiser imprimir o nome de cada empresa que tem pelo menos um orçamento (é isso que você quer?), a consulta é ligeiramente diferente.

Tipo, eu tenho a tabela ORC que armazena os orçamentos (sempre que eu preciso comprar um material eu coto ele em varias empresas) quando eu salvo um orçamento ele pega as seguintes informações:
o nome da empresa, o item cotado, a quantidade, o status (que seria “enviar pedido de orçamento”, “aguardando orçamento” e “orçado”). Quando eu envio o orçamento por e-mail eu altero o status de “enviar pedido de orçamento” para “aguardando orçamento” e quando eu abro esse orçamento para colocar o valor eu altero de novo o status para “orçado”.

Oque eu estou tentando fazer agora é realizar uma busca nessa tabela pelo nome da empresa e no campo onde eu digito oque vai ser procurado eu coloco o status “enviar pedido de orçamento” então esta listando em um jcombobox todas as empresas que tem orçamentos pendente (que é o que esta repetindo varias vezes porque se eu coto dois itens na mesma empresa, nesse resultado o nome da empresa aparece duas vezes) então em outra lista aparece todos os orçamentos enviados para a empresa que tiver selecionada

meu Deus, até eu fiquei confuso agora…

se você souber outra maneira de chegar nesse resultado eu ficaria grato pela sua ajuda.

resumindo é isso mesmo, preciso imprimir o nome de cada empresa que tem pelo menos um orçamento

como eu faço isso?

Ah, agora entendi. Você quer pôr, no combo, uma lista das empresas que têm orçamentos pendentes.

isso quer dizer que você precisa indicar no WHERE o status (como você já fez).

A primeiríssima coisa a fazer é evitar o uso de SELECT * em programas, porque isso indica um pouco de preguiça de pensar. O correto é você indicar no select apenas os campos que você precisa pegar.

Outra coisa é evitar o uso de LIKE a menos que estritamente necessário . Da mesma forma, isso indica preguiça de pensar. O correto é bater com o valor que você precisa.

Não sei como é representado um orçamento pendente, mas provavelmente você precisa algo como:

SELECT DISTINCT EMPRESA FROM ORC WHERE STATUS = ‘P’;

onde P é o indicador de pendência.

Outra coisa - essa tabela está esquisita. Normalmente você tem algo como um código de empresa, não o nome da empresa, na tabela de orçamentos, porque senão você pode ter aberrações como ter na tabela de orçamentos diversos orçamentos para a mesma empresa , mas que vao aparecer como empresas diferentes, porque você cadastrou o nome da empresa de formas diferentes (como “GUJ”, “guj” ou “G.U.J.”, por exemplo).

não deu certo, vou postar os códigos

na classe dao que faz a busca eu tenho esse código:

public List<logicoOrcamento> getListaStatus(String nome) throws SQLException {
    String sql = "select * from ORC where STATUS like? order by EMPRESA ";
    PreparedStatement stmt = this.conexao.prepareStatement(sql);
    stmt.setString(1, nome);
    ResultSet rs = stmt.executeQuery();

    List<logicoOrcamento> minhaLista = new ArrayList<logicoOrcamento>();

    while (rs.next()) {
        logicoOrcamento c1 = new logicoOrcamento();
        c1.setCod(Long.valueOf(rs.getString("COD")));

        c1.setCodJob(Long.valueOf(rs.getString("CODJOB")));
        c1.setData(rs.getString("DATA"));
        c1.setEmpresa(rs.getString("EMPRESA"));
        c1.setQtd(rs.getString("QTD"));
        c1.setValor(rs.getString("VALOR"));
        c1.setStatus(rs.getString("STATUS"));


        minhaLista.add(c1);
    }

    rs.close();
    stmt.close();
    System.out.println("Desconectado do banco");
    return minhaLista;


}

e na classe do form que usa esse evento está assim:

public void pesquisaEmpresa(){
    try {
        pesquisaEmp();
    } catch (SQLException ex) {
        System.out.println("Problema no campo pesquisaEmpresa");
    }
}

public void pesquisaEmp() throws SQLException {

    daoOrcamento dao = new daoOrcamento();

    List<logicoOrcamento> minhalista = dao.getListaStatus("Enviar Pedido de Orçamento");

    for (logicoOrcamento contato : minhalista) {

        
        jCEmpresa.addItem(contato.getEmpresa());

    }

}

desta forma ele esta me retornando no jcombobox somente as empresas com o status “Enviar Pedido de Orçamento” mas está repetindo o nome da empresa para cada cotação dela que esta pendente.

Tentou isso?

select * from orc where status=‘enviar pedido de orçamento’ group by empresa;