Pour fixer les idées :
SELECT TOP (20) T0.[CardCode], T0.[CardName] FROM OCRD T0 WHERE LEFT([CardCode],1) = 'F' ORDER BY T0.[CardCode]
Renvoie :
1 F00001 AJInternational
2 F00002 CALBERSON YVELINES
3 F00003 CCIJF
4 F00004 ABOTT ARTISAN
5 F00005 STANLEY SOLUTIONS DE SECURITE
6 F00006 AGILENT TECHNOLOGIES FRANCE
7 F00007 AIGOTEC GmbH
8 F00008 ALD AUTOMOTIVE
9 F00009 ALPHA MOS
10 F00011 BSI
11 F00012 AMT Emballages
12 F00013 ANA SALES FRANCE SA
13 F00014 APS Int
14 F00015 CHATEAU D'EAU
15 F00016 ARC EN CIEL
16 F00017 ARVAL
17 F00018 ASC Privée
18 F00021 Autradet
19 F00022 AVIS LOCATION DE VOITURES
20 F00023 AXANTIS
L'ensemble des partenaires sont dans la table OCRD. L'index est donc alpha numérique avec la lettre F pour discriminer les Fournisseurs des autres Partenaires.
On voit que le CardName suit dans la mesures des aberrations historiques et des éventuelles impossibilités évoquées par Waldar l'ordre alphabétique de l'index.
Cet index est généré automatiquement par une "Recherche formatée" s"appuyant sur une requête SQL dont je simplifie le code ici pour n'en donner que la partie correspondante à la génération de l'index dans le cas des fournisseurs :
1 2 3 4
| set @max = (select max(substring(cardcode, 2, 5)) from ocrd where cardcode like 'F0%%')
set @temp = cast(@max as integer)
set @temp = @temp + 1
set @res = 'F' + right('00000'+cast(@temp as varchar(5)), 5) |
soit le dernier enregistrement + 1. Pour réutiliser les trous, l'objectif est de modifier la définition de la variable @max par une requête qui renvoie le premier CardCode disponible dont le CardName est inférieur à celui de l'enregistrement en cours de création.
Problème : un trou est défini par l’enregistrement qui le précède. Comme ces enregistrements ne sont déjà pas dans l'ordre alphabétique (voir extrait de la table) cette information n'est pas fiable. Je souhaite donc me baser non pas sur OCRD brute mais sur une requête sur OCRD qui n'en renvoie que les enregistrements qui respectent l'ordre alphabétique.
Compliqué sans aucun doute, mais je suis ouvert à toute solution dans cette voie ou dans une voie alternative.
Merci d'avance pour vos suggestions et commentaires
Partager