Select com condicional - Talvez if... ou o que resolver

WHERE
orcamentoprod.codorc = 1723 AND
orcamentoprod.codprod = itens.item_id AND
imagem_itens.item_id = itens.item_id AND
if(imagem_itens.ordem = 1,imagem_itens.ordem = 1, imagem_itens.ordem IS NULL)

minha questão está na última linha, preciso trazer SOMENTE se tiver algum que for “imagem_itens.ordem =1”, na ausência trazer qualquer outro……, no if que eu fiz está trazendo tudo… poderia ser de qualquer forma, estou tentando mas minha lógica na construção está errada, ou não seria a melhor forma de resolver o problema…

Não sei qual teu banco, mas no PostgreSQL usamos CASE.

UPDATE empresa AS campo SET nome = 
        CASE
            WHEN rc.office IS NULL OR rc.office = '' THEN ptn.first_name || ' ' || ptn.last_name
            ELSE ptn.first_name || ' ' || ptn.last_name || ' for ' || rc.office
        END
    )

Ou é o cansaço, ou é burrice mesmo… não consegui simular na minha situação…

Use o SQL Builder do SC ele é bem prático, para montar JOINS de ligação principais entre
as tabelas, e depois use o WHERE para filtrar o restante desejado em cima das ligações já feitas,
um exemplo que fiz aqui:

1 Curtida

Olá meu amigo…
Usar join ou mesmo sem para fazer select é tranquilo, mas como pode ver no tópico é a lógica pra resolver meu problema…
Caso tenha agradeço.

Pelo seu exemplo se resolve assim:

WHERE
orcamentoprod.codorc = 1723 AND
orcamentoprod.codprod = itens.item_id AND
imagem_itens.item_id = itens.item_id AND
( imagem_itens.ordem IS NULL OR imagem_itens.ordem = 1 )

Não resolve amigo… pois “( imagem_itens.ordem IS NULL OR imagem_itens.ordem = 1 )” ele vai trazer os dois, e preciso que seja…
Primeiro trazer SOMENTE se tiver algum que for “=1”, na ausência trazer qualquer outro…
Alguma sugestão a mais?

Qual banco de dados você está usando?

WHERE
CASE imagem_itens.ordem
WHEN ( imagem_itens.ordem > 0 ) THEN imagem_itens.ordem > 0
WHEN ( imagem_itens.ordem IS NULL ) THEN XXXXX(O QUE VC QUISER )
END

Fiz um teste aqui numa tabela, funcionou no meu caso, veja o exemplo:

SELECT SEQUENCIAL_CAE, TITULO_CAE, DESCRICAO_CAE
FROM CALENDARIOEVENTO
WHERE
CASE TIPOEVENTO_CAE
WHEN ‘Au’ THEN DATAINICIO_CAE <= ‘2019-05-20’
WHEN ‘Fe’ THEN DATAINICIO_CAE >= ‘2019-05-20’
END

Talvez ainda eu não esteja fazendo o correto… usei a condição seguinte, mas no momento em que Alterei todos para NULL, para simular uma ambiente onde não tenha “imagem_itens.ordem = 1”, ele não me trouxe os outros, ou seja o que contém " imagem_itens.ordem IS NULL" ou diferentes de 1.

CASE imagem_itens.ordem
WHEN ( imagem_itens.ordem > 0 ) THEN imagem_itens.ordem > 0
WHEN ( imagem_itens.ordem IS NULL ) THEN imagem_itens.ordem IS NULL
END

Na sua consulta original… coloque o if não no where mas dentro dos campos
tipo:
SELECT CAMPO1,CAMPO2, if(imagem_itens.ordem = 1,imagem_itens.ordem = 1, imagem_itens.ordem IS NULL) as ordem FROM TABELA
WHERE
orcamentoprod.codorc = 1723 AND
orcamentoprod.codprod = itens.item_id AND
imagem_itens.item_id = itens.item_id

assim vai ter uma coluna ordem com o resultado… não se se é o caso, mas dar ideia não custa :slight_smile:

Agradeço @jair, mas nesta lógica vai criar uma coluna repetindo novamente o valor que já existe na imagem_itens.ordem…
Agradeço a força de vontade…
Estou aberto as possibilidades desta solução.

Sim, mas pode comparar esta coluna do resultado e trabalhar com ela no código, vaicriar a coluna com o resultado desejado, não vai ser igual a original, só vai validar ela

se colocar no select
if(imagem_itens.ordem = 1,imagem_itens.ordem = 1, imagem_itens.ordem=’’) as ordem

E no código um if para ver se é 1 com esta coluna, se ordem==1 pega ela, se não, ai voce pega qualquer outra ordem.

A tarde tento simular um if no where, se conseguir posto…

Já tentou fazer um Union?

Não, pois não liguei como o Union resolveria meu problema… já tentei tanta coisa, se tiver a solução me ajude aí…