SELECT para nomes iguais

Delphi

30/11/2011

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

Curtidas 0

Respostas

Vagner Almeida

Vagner Almeida

30/11/2011

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.
GOSTEI 0
Marcos Barbosa

Marcos Barbosa

30/11/2011

Vou testar aqui e posto o resultado.
Vlw.
GOSTEI 0
Marcos Barbosa

Marcos Barbosa

30/11/2011

Oh, usando o distinct, funciona a 1ª dúvida, mas a segunda ainda tenho problemas.
GOSTEI 0
Marcos Barbosa

Marcos Barbosa

30/11/2011

Oh, usando o distinct, funciona a 1ª dúvida, mas a segunda ainda tenho problemas.
GOSTEI 0
Wilson Junior

Wilson Junior

30/11/2011

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.
GOSTEI 0
Marcos Barbosa

Marcos Barbosa

30/11/2011

Vlw, aí, vou fazer e posto o resultado quando estiver terminado.
GOSTEI 0
Vagner Almeida

Vagner Almeida

30/11/2011

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.
GOSTEI 0
Marcos Barbosa

Marcos Barbosa

30/11/2011

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.
GOSTEI 0
POSTAR