Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

vá para a próxima linha quando uma coluna contém determinado valor (sql server 2008)


Existe uma maneira relativamente eficiente de determinar se os dados estão corretos - bem, quase. Ele determinará se estão faltando "1"s ou "2"s nos dados. Esta versão não determina se o primeiro id é "1", porque sua pergunta não menciona isso.

A melhor solução é usar lag() e lead() . No entanto, o SQL Server 2008 não oferece suporte a essas funções. Então, vamos abordar isso como uma lacuna e ilhas. Existem situações com mais de 1 "1" ou "2" em uma linha para um determinado id ? O código a seguir deve encontrar essas anomalias:
select id, inoutid, count(*) as num_in_row,
from (select t.*,
             row_umber() over (partition by id, inoutid order by date, hours, minute) as seqnum_ii,
             row_umber() over (partition by id order by date, hours, minute) as seqnum_i
      from t
     ) t
group by id, inoutid, (seqnum_i - seqnum_ii)
having count(*) > 1