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 : 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 ------------------------------------ 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 : 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 ------------------------------------ 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.
Partager