Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

aller à la ligne suivante lorsqu'une colonne contient une certaine valeur (sql server 2008)

Il existe un moyen relativement efficace de déterminer si les données sont correctes - enfin presque. Il déterminera s'il manque des "1" ou des "2" dans les données. Cette version ne détermine pas si le premier identifiant est "1", car votre question ne le mentionne pas.

La meilleure solution est d'utiliser lag() et lead() . Cependant, SQL Server 2008 ne prend pas en charge ces fonctions. Alors, abordons cela comme un fossé et des îles. Existe-t-il des situations avec plus de 1 "1" ou "2" d'affilée pour un id donné ? Le code suivant devrait trouver ces anomalies :

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