Difficultés avec les commandes WHILE, UPDATE et IF appliquées à SQL Server
Bonjour,
Je suis un nouvel utilisateur de SQL Server et je souhaite traiter des points d’arpentage afin de construite différentes figures géométriques.
Ce qu’il me faut faire, c’est de pouvoir reconnaître et définir des sous-groupes de points dans une liste globale. Il y a trois types de sous-groupes, les points individuels, les courbes (qui sont des formes ouvertes), puis les polygones (soit des formes fermées).
Un code d’enregistrements permet de reconnaître si une suite de points appartient à l’un ou l’autre de ces sous-groupes. Par exemple, « station » définie un point seul, puis toutes les séquences de figures débutent avec le code « debut », se poursuive avec « continuer » et se termine avec le code « fermer » s’il s’agit d’un polygone, ou avec le code « fin » s’il s’agit plutôt d’une courbe.
Voici un exemple de table de points :
Tbl_ListePoints
ID |
NORD |
EST |
CODE |
FIGURE |
SEQUENCE |
GROUPE |
1 |
100.00 |
100.00 |
station |
null |
null |
null |
2 |
200.00 |
125.00 |
station |
null |
null |
null |
3 |
250.00 |
265.00 |
debut |
null |
null |
null |
4 |
255.00 |
268.00 |
continuer |
null |
null |
null |
5 |
240.00 |
250.00 |
continuer |
null |
null |
null |
6 |
238.00 |
244.00 |
fermer |
null |
null |
null |
7 |
375.00 |
360.00 |
debut |
null |
null |
null |
8 |
382.00 |
369.00 |
continuer |
null |
null |
null |
9 |
366.00 |
387.00 |
continuer |
null |
null |
null |
10 |
370.00 |
372.00 |
fin |
null |
null |
null |
Ma stratégie -- qui ne fonctionne pas ! – se décompose en trois étapes :
1- D’abord, je mets à jour les codes afin d’uniformiser les balises de début et de fin de figures, indépendamment qu’il s’agisse de courbes ou de polygones. Cette partie du processus fonctionne bien :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
------------------------------------
declare @figD nvarchar(1) set @figD = 'D'
declare @figC nvarchar(1) set @figC = 'C'
declare @figF nvarchar(1) set @figF = 'F'
update tbl_ListePoints
set FIGURE =
(case
when CODE = 'debut' then @figD
when CODE = 'continuer' then @figC
when CODE = 'fermer' then @figF
when CODE = 'fin' then @figF
else NULL
end)
go
------------------------------------ |
2- Ensuite, je souhaite créer une séquence numérique entre les balises qui fait le compte de 1 à (n) entre le début et la fin d’une figure :
Code:
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
|
------------------------------------
declare @i int
while (select FIGURE from tbl_ListePoints
where FIGURE <> NULL) = 'F'
begin
set @i = 1
begin
update tbl_ARPT_PNTS_temp
if (select FIGURE from tbl_ListePoints) = 'D'
set SEQUENCE = @i
end
if (select FIGURE from tbl_ListePoints) = 'C'
set @i = @i + 1
set SEQUENCE = @i
end
if (select FIGURE from tbl_ListePoints) = 'F'
break
end
end
end
------------------------------------ |
Le code ci-dessus présente l’idée de base, mais il ne fonctionne pas.
3- Enfin, je veux particulariser chaque groupe de figure avec un code unique qui permettra de les raccorder à des tables parentes.
Pour cette partie, je n’ai pas d’idée précise, sinon qu’il faudrait intégrer un décompte sur les groupes, puis déterminer le type de groupe en fonction du code de fin de figure (« fin » ou « fermer »).
Après les différentes manipulations, la table devrait maintenant se présenter comme suit :
ID |
NORD |
EST |
CODE |
FIGURE |
SEQUENCE |
GROUPE |
1 |
100.00 |
100.00 |
station |
null |
null |
null |
2 |
200.00 |
125.00 |
station |
null |
null |
null |
3 |
250.00 |
265.00 |
debut |
D |
1 |
polygone-1 |
4 |
255.00 |
268.00 |
continuer |
C |
2 |
polygone-1 |
5 |
240.00 |
250.00 |
continuer |
C |
3 |
polygone-1 |
6 |
238.00 |
244.00 |
fermer |
F |
4 |
polygone-1 |
7 |
375.00 |
360.00 |
debut |
D |
1 |
courbe-1 |
8 |
382.00 |
369.00 |
continuer |
C |
2 |
courbe-1 |
9 |
366.00 |
387.00 |
continuer |
C |
3 |
courbe-1 |
10 |
370.00 |
372.00 |
fin |
F |
4 |
courbe-1 |
Toute aide concernant spécifiquement les formes des commandes While et Update en Transact-SQL sera bienvenue,
Merci
À noter: la table réelle comporte plus de 20 000 entrées et la définition des courbes ou des polygones peut varier d’un groupe de seulement 2 points à des groupes de plus d’une centaine de points.