Jump to content

Archived

This topic is now archived and is closed to further replies.

brunoguitarman

Criar tabela temporária apartir de dados de um select. Como?

Recommended Posts

Galera, tenho aqui um select que faz a busca de alguns bens com base na sua localização atual. Estou precisando, para aqueles que tenham localização anterior, que seja mostrada sua localização anterior, enquanto os outros, que não tiverem localização anterior, mostram sua localização atual.

 

A maneira mais fácil que encontrei de fazer isso (só não sei ainda como fazer :P) é utilizando o select que já tenho, depois, para cada elemento retornado por esse select verificar se ele possui uma localização anterior (isso eu faço utilizando um outro select, pesquisando em outra tabela). Se ele tiver localização anterior, passo seus dados, com o campo localização alterado para a minha tabela temporária, caso não tenha, passo seus dados intactos para a tabela temporária. Só para deixar mais claro, isso eu vou fazer para gerar um relatório no Delphi.

 

Até aqui pode ter ficado meio confuso, então vou tentar exemplificar um pouco:

 

Digamos que o select que já tenho gerou o seguinte conjunto de dados:

 

Código	   Localização
1				1
2				1
3				1
4				2
5				2
6				2
7				3
8				3
9				3

e para a pesquisa que farei, item a item, para saber a localização anterior, ele gera o seguinte:

 

Código	   Localização
1				Não tem
2				3
3				1
4				2
5				Não tem
6				Não tem
7				1
8				1
9				2

Primeiro de tudo: Como faço para a cada pesquisa dessas ir incluindo os dados na nova tabela temporária? (Lembrem-se que é no Delphi que vou fazer isso, então, talvez fique mais simples, pois vou fazer uma varredura do primeiro ao último registro retornado pelo meu primeiro select, então, pelo que estou imaginando, a cada registro faço a pesquisa para verificar a localização anterior e, após isso, jogo na tabela temporária).

 

Por fim, a tabela temporária ficaria da seguinte forma:

 

Código	   Localização
1				1
2				3
3				1
4				2
5				2
6				2
7				1
8				1
9				2

Agora, como o relatório que vou gerar é ordenado por sua localização, precisaria fazer um order by para retornar a tabela temporária da seguinte forma:

 

Código	   Localização
1				1
3				1
7				1
8				1
4				2
5				2
6				2
9				2
2				3

E então, alguém pra me ajudar?

Share this post


Link to post
Share on other sites

não dá para saber o que você quer direito.

o que é localização 1 , 2 e 3??? E localização 'não tem'???

 

 

pelo que eu estou entendendo, você deveria fazer a consulta com os anteriores e gravar na tabela temporária. Se aparecer na tabela 'Não tem' faz um select na atual usando o replace para quando localização = 'não tem'

Share this post


Link to post
Share on other sites

não dá para saber o que você quer direito.

o que é localização 1 , 2 e 3??? E localização 'não tem'???

 

 

pelo que eu estou entendendo, você deveria fazer a consulta com os anteriores e gravar na tabela temporária. Se aparecer na tabela 'Não tem' faz um select na atual usando o replace para quando localização = 'não tem'

Localização 1,2 e 3 são apenas números que eu coloquei pra indicar uma localização qualquer do bem. Digamos que 1 seja escritório, 2 seja banheiro e 3 seja quarto, sei lá. É só o valor do campo, não vai influenciar.

 

O localização 'não tem' foi pro caso da pesquisa de localização anterior. É que eu tenho uma tabela com bens e ela possui suas localizações atuais. Alguns bens estavam em outro lugar na última transferência, mas alguns nunca foram transferidos, então eles não têm localização anterior, por isso o 'não tem'. Nesse caso a consulta que eu faria pra esse bem não retornaria nada, por que é uma pesquisa a uma tabela que só mostra localizações anteriores de bens, então, se ele nunca teve uma localização anterior, ele não estará naquela tabela.

 

Então, pegando o meu select original, ele retornaria isto:

 

Código	   Localização
1				1
2				1
3				1
4				2
5				2
6				2
7				3
8				3
9				3

Certo? Agora faço o meu select para cada item, ou seja, algo tipo isto:

 

SELECT *
FROM tabela_de_localizações_anteriores
WHERE código = :codigo_do_bem

Onde ':codigo_do_bem' será, a cada passagem, um dos códigos da tabela retornada pelo meu primeiro select. No caso, esse meu segundo select será executado 9 vezes. Na primeira, ':codigo_do_bem' será 1, na segunda 2, na terceira 3, assim por diante.

Dessa forma, pelo exemplo que eu tinha dado, quando ':codigo_do_bem' for 1, 5 e 6 o meu segundo select não retornará nada, então devo passar os dados deles diretamente da tabela retornada pelo meu primeiro select para a minha tabela temporária. Já quando o campo ':codigo_do_bem' dor 2, 3, 4, 7, 8 ou 9, devo pegar seus dados da tabela retornada pelo primeiro select e passá-los para a minha tabela temporária, só que a localização eu terei que mudar, pegando a que for retornada pelo meu segundo select.

Share this post


Link to post
Share on other sites

então eu não entendi qual o teu problema.

você tem a consulta ATUAL que traz a localização atual.

Em seguida você faz a consulta ANTERIOR para verificar se existe localização anterior.

 

você faz a consulta (de 1 a 10 por exemplo) na tabela ANTERIOR e grava na tabela temporária.

e a consulta ATUAL você faz onde o código não está na tabela temporária.

 

tipo, tu gravou (2, 3, 4, 7, 8 ou 9) na tabela temporária.

agora você verifica o ATUAL onde os códigos são diferentes desses

Share this post


Link to post
Share on other sites

a manipulação é igual a uma tabela comum.

para criar eu não lembro direito mas acho que é assim:

 

select campo1, campo2, campo3
into #tmp_tab
from tabela

aí para manipular

select * from tmp_tab

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.