Comme les données sont confidentielles, j'ai créé deux tables exemple pour vous .
J'ai de la misère à faire cette boucle.

Premièrement, les personnes peuvent avoir plusieurs éléments ainsi des dates correspondant à cela.
Alors on prend dans la jointure de deux tabls , seulement la date qui concorde c’est a dire Date_Per(2006) ( from table salary)=Date_element (2006) (from my table)
After that je fais le recursive sur la Year(date_per)-1 tant que l’élément 1 n’est pas null et l’élément 2 est nul , dans le données ci-dessous, on voit qu’à la cinquième étape l’élément 1 est null et l’élément 2 n’est pas null donc on arrête la boucle car cela ne répond pas à notre critère et on affiche l’année

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
set dateformat 'ymd'
Drop table #salary
CREATE TABLE #salary(
    ID_Personne int IDENTITY(1,1) PRIMARY KEY ,
    DATE_Per Date
)
 
 
 
--This is the data of my table:
INSERT INTO #salary VALUES ('2015-05-10')
INSERT INTO #salary VALUES ('2019-05-10')
INSERT INTO #salary VALUES ('2017-02-18')
INSERT INTO #salary VALUES ('2019-10-05')
INSERT INTO #salary VALUES ('2010-08-25')
INSERT INTO #salary VALUES ('2018-08-10')
INSERT INTO #salary VALUES ('2004-09-13')
INSERT INTO #salary VALUES ('2005-04-10')
INSERT INTO #salary VALUES ('2018-02-14')
INSERT INTO #salary VALUES ('2014-05-10')
INSERT INTO #salary VALUES ('2019-12-12')
INSERT INTO #salary VALUES ('2018-08-13')
INSERT INTO #salary VALUES ('2011-01-18')
INSERT INTO #salary VALUES ('2009-09-19')
INSERT INTO #salary VALUES ('2005-05-19')
INSERT INTO #salary VALUES ('2008-04-10')
INSERT INTO #salary VALUES ('2018-02-14')
INSERT INTO #salary VALUES ('2018-05-10')
INSERT INTO #salary VALUES ('2018-12-12')
INSERT INTO #salary VALUES ('2017-08-13')
INSERT INTO #salary VALUES ('2013-08-05')
INSERT INTO #salary VALUES ('2009-07-25')
INSERT INTO #salary VALUES ('2005-05-19')
 
 
 
Drop table #myTable
CREATE TABLE #myTable(
    ID_element int IDENTITY(200,1) PRIMARY KEY ,
    Element1 nvarchar(10),
	Element2 nvarchar(10),
	DATE_Ele Date,
	ID_Personne int
    FOREIGN KEY (ID_Personne)
    REFERENCES #salary (ID_Personne)
 
)
 
INSERT INTO #myTable VALUES ('A','B','2011-01-18',1)
INSERT INTO #myTable VALUES ('A','B','2009-09-19',2)
INSERT INTO #myTable VALUES ('A','B','2005-05-19',3)
INSERT INTO #myTable VALUES ('A','B','2008-04-10',4)
INSERT INTO #myTable VALUES ('A','B','2018-02-14',5)
INSERT INTO #myTable VALUES ('A','B','2018-05-10',6)
INSERT INTO #myTable VALUES ('A','B','2018-12-12',7)
INSERT INTO #myTable VALUES ('A','B','2004-03-20',8)
INSERT INTO #myTable VALUES ('A',NULL,'2018-02-14',9)
INSERT INTO #myTable VALUES ('A',NULL,'2014-02-14',9)
INSERT INTO #myTable VALUES ('A',NULL,'2015-02-14',9)
INSERT INTO #myTable VALUES ('A','B','2013-02-14',9)
INSERT INTO #myTable VALUES ('A',NULL,'2014-05-10',10)
INSERT INTO #myTable VALUES ('A',NULL,'2019-12-12',11)
INSERT INTO #myTable VALUES ('A',NULL,'2019-10-05',4)
INSERT INTO #myTable VALUES ('A',NULL,'2010-08-25',5)
INSERT INTO #myTable VALUES ('A',NULL,'2009-08-25',5)
INSERT INTO #myTable VALUES ('A',NULL,'2008-08-25',5)
INSERT INTO #myTable VALUES ('A','B','2007-03-25',5)
INSERT INTO #myTable VALUES ('A',NULL,'2018-08-10',6)
INSERT INTO #myTable VALUES ('A',NULL,'2004-09-13',7)
INSERT INTO #myTable VALUES ('A',NULL,'2005-04-10',8)
INSERT INTO #myTable VALUES ('A',NULL,'2009-07-25',10)
INSERT INTO #myTable VALUES ('A',NULL,'2005-05-19',11)
INSERT INTO #myTable VALUES ('A','B','2004-05-19',11)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Drop table #cteReports15
;WITH
  cteReports (ID_Personne, Annee)
  AS
  (
    SELECT t.ID_Personne, Year(t.DATE_Per) as Annee 
    FROM #salary as t
	Inner Join #myTable  as a
	ON t.ID_Personne=a.ID_Personne
	AND t.DATE_Per=a.DATE_Ele
	where a.Element1 is not null AND a.Element2 is null
 
    UNION ALL
    SELECT t.ID_Personne, Year(t.DATE_Per)-1 as Anneef 
   FROM #salary as t
	Inner Join #myTable  as a
	ON t.ID_Personne=a.ID_Personne
	AND t.DATE_Per=a.DATE_Ele
	Inner Join cteReports
	on cteReports.ID_Personne=a.ID_Personne
 
  )
  --Drop table #cteReports11
  Select Distinct ID_Personne, Annee 
INTO		#cteReports15
FROM		cteReports
OPTION (MAXRECURSION 1000);

Merci pour votre aide