Jump to content
Sign in to follow this  
Quati Maldito

select dinamico

Recommended Posts

Olá galera, boa tarde!

Tenho uma tabela mais ou menos assim:

id | valor | nome_campo | item_id (fk)

----------------------------------------------
1 | 9 | campo_1 | 22
2 | 10 | campo_2 | 21

3 | 2 | campo_2 | 22

4 | 3 | campo_2 | 21

5 | 3 | campo_1 | 22

6 | 9 | campo_2 | 26

7 | 9 | campo_1 | 22

8 | 9 | campo_3 | 25

9 | 10 | campo_4 | 27

10 | 9 | campo_1 | 24

11 | 10 | campo_2 | 22

12 | 10 | campo_2 | 24

13 | 10 | campo_2 | 22

14 | 10 | campo_1 | 21

Preciso listar todos os registros onde:

nome_campo = 'campo_1' e valor = 9

E / OU ????

nome_campo = 'campo_2' e valor = 10

mas que a coluna item_id sejam em comum aos registros retornados com base nas linha acima.

O resultado esperado é este:

id | valor | nome_campo | item_id (fk)

----------------------------------------------
1 | 9 | campo_1 | 22
7 | 9 | campo_1 | 22

11 | 10 | campo_2 | 22

13 | 10 | campo_2 | 22

12 | 10 | campo_2 | 24

10 | 9 | campo_1 | 24

Os valores que são passados para a "montagem" do where da query são "campo_1, valor 9 e campo_2, valor 10"

Share this post


Link to post
Share on other sites

Então eu usei dessa maneira até funcionou mas não do jeito que eu queria pois ele traz os dados cujo os valores são iguais a 9 ou igual a 10. Ou seja eu espero esse resultado

id | valor | nome_campo | item_id (fk)
----------------------------------------------
1 | 9 | campo_1 | 22
11 | 10 | campo_2 | 22
7 | 9 | campo_1 | 23
13 | 10 | campo_2 | 23

Mais essa solução traz esse dados , trazendo "ou" um "ou" outro

id | valor | nome_campo | item_id (fk)
----------------------------------------------
6 | 9 | campo_2 | 26
7 | 15 | campo_1 | 26
8 | 7 | campo_2 | 27
9 | 10 | campo_1 | 27

até tentei colocar and mais não vai


O que quiz dizer sobre o id é que ele não pode ser da maneira abaixo pois quero o retorno de todos os dados que procurar e não apena de um ou outro como esta abaixo trazendo um unico valor de um id

id | valor | nome_campo | item_id (fk)
----------------------------------------------
6 | 9 | campo_2 | 26
7 | 15 | campo_1 | 26
8 | 7 | campo_2 | 27
9 | 10 | campo_1 | 27

5 | 10 | campo_1 | 29

Share this post


Link to post
Share on other sites

não seria só isto?

select *
from ods.tabela
where (nome_campo = 'campo_1' and valor = 9)
or (nome_campo = 'campo_2' and valor = 10)
order by id
Não entendi o que você quis dizer sobre a coluna item_id

Tente só mudar, na última linha, de id para item_id:

select *
from ods.tabela
where (nome_campo = 'campo_1' and valor = 9) 
   or (nome_campo = 'campo_2' and valor = 10) 
order by item_id

Share this post


Link to post
Share on other sites

Deixa-me ver se entendi o que precisa...

Além das condições já descritas (campo_1, valor 9 e campo_2, valor 10), ainda precisa que o campo item_id seja o mesmo entre elas?

Se for isso, o problema está na ordenação.

Vejamos:

select *
from ods.tabela
where (nome_campo = 'campo_1' and valor = 9) 
   or (nome_campo = 'campo_2' and valor = 10) 
order by item_id ASC, valor ASC, nome_campo ASC

Seria isso?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

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