Jump to content

Dúvida SQL


camurso_
 Share

Recommended Posts

Malta, há maneira, usando apenas um select de saber se uma linha tem os valores todos iguais, ou seja, suponhamos que tenho a seguinte tabela:

 

Col1     Col2     Col3     Col4

  2           2            3           2

 

Usando apenas um SELECT, consigo saber que o valor mudou na Col3?

Não posso meter código, só posso usar instruções SQL "puro"

Link to comment
Share on other sites

Boas,

Usando so select, tenta usar fazer UNPIVOT da tabela e sacar o minimo e o maximo valor.

e.g.

with col_data as (
    select rownum as idrow,  2 as col1, 2 as col2, 3 as col3, 2 as col4 from dual
    union
    select rownum+1 as idrow, 2 as col1, 2 as col2, 2 as col3, 2 as col4 from dual
    union
    select rownum+2 as idrow, 2 as col1, 2 as col2, 2 as col3, 2 as col4 from dual
    union
    select rownum+3 as idrow, 5 as col1, 2 as col2, 2 as col3, 2 as col4 from dual

select col_data.idrow, themax, themin from col_data
join
(

    select idrow, max(Amount) as themax, min(Amount) as themin
    from 
        col_data 
        UNPIVOT ( Amount FOR AmountCol IN (col1, col2, col3, col4) ) unpvt
    group by idrow
    
) val_cols
on col_data.idrow = val_cols.idrow and val_cols.themax <>  val_cols.themin;

Isto funciona.

  • Thanks 1
Link to comment
Share on other sites

Muito obrigado pela sugestão.

Entretanto, usei uma outra abordagem, que também funciona, usando cases para comparar os valores das colunas, um a um, com uma coluna, que usei como referência.

Link to comment
Share on other sites

Também pensei em fazer com o unpivot, mas não bastará simplesmente algo assim:

A query seguinte deve dar os registos que tem o mesmo valor nas colunas Col1 até Col4.

SELECT *
  FROM TABELA AS T

 WHERE Col1 = Col2

  AND Col2 = Col3

  AND Col3 = Col4

Para encontrar os registos com diferenças podes simplesmente negar a cláusula WHERE ou trocar os ANDs por ORs

  • Thanks 1
Link to comment
Share on other sites

Sim, caso seja só para comparar essas 4 colunas podes fazer com case ou fazer essas comparações na cláusula where.

Eu é que estava a pensar que eram mais que 4 colunas, nesse caso unpivot é a melhor solução na minha opinião.

🖖

  • Like 1
  • Thanks 1
Link to comment
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
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.