1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
drop table t
create table t ( ord int primary key, Machine nvarchar(5), secondes int, Ddate datetime, Duree_Total int,Point int, RowsNo int)
insert t(ord,Machine,secondes,Ddate) values (1,'A001',150,'10/08/2020')
insert t(ord,Machine,secondes,Ddate) values (2,'A001',140,'09/08/2020')
insert t(ord,Machine,secondes,Ddate) values (3,'A001',130,'08/08/2020')
insert t(ord,Machine,secondes,Ddate) values (4,'A001',110,'07/08/2020')
insert t(ord,Machine,secondes,Ddate) values (5,'A001',110,'06/08/2020')
insert t(ord,Machine,secondes,Ddate) values (6,'A002',110,'10/08/2020')
insert t(ord,Machine,secondes,Ddate) values (7,'A002',130,'09/08/2020')
declare @total int,@Mac nvarchar(5), @point int, @Trouve int,@NoLigne int,@NbLigne int
select @total = 0, @Mac='',@point=0 , @Trouve=0,@NoLigne=1,@NbLigne=0
update t set
-- on numerote les lignes
RowsNo = @NoLigne,
@NoLigne=case when @mac <> Machine then 1 else @NoLigne+1 end,
-- A chaque changement de machine on remet le compteur à 0
@total=case when @mac <> Machine then ( secondes ) else ( @total + secondes) end,
@Mac=Machine,
--on compte combien il y a de ligne par machine
@NbLigne =( select COUNT(*) from t xx where t.Machine = xx.Machine),
-- ici on recherche le >500
@point = case when (@total>=500 and @Trouve=0) then 1 else 0 end,
--si trouvé ou si nombre de ligne a explorer terminés mais total de 500 non atteint
@Trouve = case when (@point=1 or ((@NoLigne=@NbLigne) and @total<500)) then 1 else 0 end,
--on injecte le resultat
Duree_Total = @total,
Point = @Trouve
SELECT Machine, Ddate,Duree_Total
FROM t
WHERE (Point = 1) |
Partager