Fórum SELECT para nomes iguais #409997

30/11/2011

0

Olá pessoal, tenho um sistema que faz importação das tabelas de um sistema de outra pessoa, entre essas tabelas, tenhos as tabelas de UNIDADE e MOVIMENTAÇÃO, que tem um fato incomum.
TABELA: unidade
ID NOME
01 UNIDADE A
02 UNIDADE B
03 UNIDADE C
04 UNIDADE B
05 UNIDADE A
06 UNIDADE B
07 UNIDADE A
08 UNIDADE B
09 UNIDADE B
10 UNIDADE A

Observem que o nome das unidades se repetem mesmo com
ID´S diferentes e apesar de ID´s diferentes, são
mesmo as mesmas unidades.
Em um módulo para relatório, uso um DBLOOKUPCOMBOBOX
para seleção das unidades, então aparecem várias unidades
como o mesmo nome, eu gostaria de mostra o nome
1 vez só, tipo
UNIDADE A
UNIDADE B
UNIDADE C

O outro problema é q numa tabela de movimentação,
guardos os ID´S dessas unidades, e os relatórios
são por unidade, ou seja, como posso fazer para
quando o usuário escolher a unidade B,
filtrar na tabela de movimentação todos os códigos
referentes a unidade B, no exemplo acima, seriam:
2, 4, 6, 8, 9
Marcos Barbosa

Marcos Barbosa

Responder

Posts

30/11/2011

Vagner Almeida

ID NOME
01 UNIDADE A
02 UNIDADE B
03 UNIDADE C
04 UNIDADE B
05 UNIDADE A
06 UNIDADE B
07 UNIDADE A
08 UNIDADE B
09 UNIDADE B
10 UNIDADE A

2 5 6 8 9

Cara, para fazer um select e não aparecer os nomes repetidamente é utilizando o DISTINCT, ficaria assim:

#### select distinct nome from tabela

Mas como temos um mesmo nome para ids diferentes e, certamente cada id deve estar relacionada a outra tabela no sistema complica.

Com o componente que vc esta utilizando acho que não da certo.

O que eu faria nesse caso é carregar os nomes em um ComboBox, e fazer um select com o nome dessa tabela buscanda as ids referente ao nome, assim:

#### select * from tabMoviementacao where id_unidade IN ((select id from tabela unidade where nome = :unidade))

Não tenho certeza de que irá dar certo, mas teste pra ver.
Responder

Gostei + 0

30/11/2011

Marcos Barbosa

Vou testar aqui e posto o resultado.
Vlw.
Responder

Gostei + 0

30/11/2011

Marcos Barbosa

Oh, usando o distinct, funciona a 1ª dúvida, mas a segunda ainda tenho problemas.
Responder

Gostei + 0

30/11/2011

Marcos Barbosa

Oh, usando o distinct, funciona a 1ª dúvida, mas a segunda ainda tenho problemas.
Responder

Gostei + 0

01/12/2011

Wilson Junior

Sugiro fazer uma consulta no BD para retornar todos os código possíveis da Unidade selecionada, e depois fazer um Movimentacao.Unidade IN (Cod1, Cod2, Cod3)

* Cod1 = 1° código retornado da consulta;
* Cod2 = 2° código retornado da consulta; e assim sucessivamente.

Você até pode utilizar o EXISTS dentro do SQL, mas iria demorar muito mais tempo.

Espero ter colaborado.
Responder

Gostei + 0

01/12/2011

Marcos Barbosa

Vlw, aí, vou fazer e posto o resultado quando estiver terminado.
Responder

Gostei + 0

01/12/2011

Vagner Almeida

Desculpe a demora de responder.

A segunda questão eu também tinha te respondido:


Com o componente que vc esta utilizando acho que não da certo.

O que eu faria nesse caso é carregar os nomes em um ComboBox, e fazer um select com o nome dessa tabela buscando as ids referente ao nome, assim:

#### select * from tabMoviementacao where id_unidade IN ((select id from tabela unidade where nome = :unidade))

Não tenho certeza de que irá dar certo, mas teste pra ver.
Responder

Gostei + 0

15/12/2011

Marcos Barbosa

Concluído.

Galera, vlw pela atenção de todos vocês, já conegui resolver.
Talvez a forma que fiz ñ seja a correta, mas foi a forma que funcionou, fiz assim:
Criei um nova tabela de IDAlternativo e nela eu armazeno cada unidade 1 vez só, e depois verifico o nome da unidade na tabela original e enquanto ele existir gravo em um campo que criei nala chamado IDalternativo o id que está na tabela de IDAlternativo, e mesmo que o Id seja diferente, mas o nome for igual, gravo o mesmo IDAlternativo nela.

Bem ñ sei se expliquei direito, mas é isso aí galera.
Brigado a todos.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar