Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

manolegal

Postgre - Descobrir coluna que dado se encontra

Recommended Posts

Olá amigos.

Me deparei com uma situação específica e não tenho idéia de como resolver.

Preciso realizar uma consulta comparando um determinado valor, porém "não sei em qual coluna da tabela este valor está".

Por exemplo, tenho na minha tabela as colunas com valores:

 

Col1 Col2 Col3 Col4 Col5

1 5 10 15 20

 

Supondo que eu queira localizar em qual coluna esteja o valor 8 por exemplo (neste caso Col3, pois 8 está entre 5 e 10, maior que 5 e menor que 10) como faço?

SELECT * minha_tabela WHERE ....

Compartilhar este post


Link para o post
Compartilhar em outros sites
select 'coluna1' coluna ,chave from tabela where coluna1 = 8
union all
select 'coluna2' coluna,chave from tabela where coluna2 = 8
union all
select 'coluna3' coluna,chave from tabela where coluna3 = 8
union all
...

Supondo que sua tabela tenha uma chave, pode até usar a tabela de metadados para montar a query.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Motta, obrigado pelo retorno.

Tentei o seguinte:

select 'coluna1' as coluna from tabela where coluna1 = 8
union all
select 'coluna2' as coluna from tabela where coluna2 = 8
union all
select 'coluna3' as coluna from tabela where coluna3 = 8;

Porém não está retornando dados, uma vez que 8 não é valor padrão de nenhum campo, sendo que preciso localizar o valor mais próximo (coluna onde o valor padrão é maior que 8, neste caso coluna 3).

O que seria a referencia "chave"?

Compartilhar este post


Link para o post
Compartilhar em outros sites

select 'coluna1' as coluna from tabela where 8 between coluna1 an coluna2

union all

select 'coluna2' as coluna from tabela where 8 between coluna2 and coluna3

union all

select 'coluna3' as coluna from tabela where 8 between coluna3 and coluna4

...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta

Fiz dessa maneira, só que ao invés de retornar 10 (Coluna 3) está retornando 5 (Coluna 2).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz da seguinte forma:

select 'coluna3' as coluna from tabela where 8 between coluna2 and coluna3 and 8 < coluna3;

Parece ter dado certo. Vou fazer mais uns testes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.