SELECT para nomes iguais
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
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
Curtidas 0
Respostas
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.
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
30/11/2011
Vou testar aqui e posto o resultado.
Vlw.
Vlw.
GOSTEI 0
Marcos Barbosa
30/11/2011
Oh, usando o distinct, funciona a 1ª dúvida, mas a segunda ainda tenho problemas.
GOSTEI 0
Marcos Barbosa
30/11/2011
Oh, usando o distinct, funciona a 1ª dúvida, mas a segunda ainda tenho problemas.
GOSTEI 0
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.
* 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
30/11/2011
Vlw, aí, vou fazer e posto o resultado quando estiver terminado.
GOSTEI 0
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.
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
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.
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