Bonjour à tous,
Je viens vous demander un coup de main pour une requête toute simple mais qui me prend la tête.
Au passage, dites-moi si ce que je cherche à faire est possible ou complètement loufoque svp ?
En gros, j'ai une table qui contient certains champs (table référençant des pièces d'un produit) dont une des rubriques est de type VARCHAR.
Pour éditer cette liste de pièces, j'ai fait une requête (pas difficile en soi) qui est la suivante :
SELECT rel_pie_pla.pipl_repere, pi.pie_id, pi.pie_code, pi.pie_numchassisapplication, pi.pie_libelle_fr as libelle, pi.pie_prix_unit_ht, rel_pie_pla.pipl_qte, (SELECT COUNT(*) FROM planches WHERE pla_idpiecereference = pi.pie_id) as ssens
FROM pieces pi LEFT OUTER JOIN rel_pie_pla ON pi.pie_id = rel_pie_pla.pipl_idpiece
WHERE NULL IS NULL AND rel_pie_pla.pipl_idplanche = 324
ORDER BY rel_pie_pla.pipl_repere, CAST(REPLACE(rel_pie_pla.pipl_repere, '-', '0') AS SIGNED), pi.pie_code
Cette requête fonctionne dans 80% des cas, sauf lorsque la rubrique "rel_pie_pla.pipl_repere" (qui correspond au repère de la pièce sur un dessin) contient des valeurs du genre "1-1", "1-10", "1-10-2".
En effet, voici un exemple de résultat de cette requête :
pipl_repere pie_id pie_code
1 5673 27.2.142
1-1 3874 27.2.158
1-1-1 3875 27.2.159
1-1-2 3876 27.0.549
1-1-3 3877 27.2.550
1-1-4 3878 27.0.550
1-10 3866 27.2.165
1-11 3864 27.2.464
1-12 3865 27.2.144
1-2 3858 27.2.143
1-2-1 2291 27.0.173
1-2-2 3860 27.2.153
1-2-3 3859 27.2.152
1-2-4 3861 27.2.155
1-2-5 3862 27.2.156
1-2-6 3863 27.2.151
1-3 3870 27.0.552
1-4 3873 27.2.161
1-5 3872 27.2.162
1-6 3871 27.2.160
1-7 3869 27.2.508
1-8 3868 27.2.164
1-9 3867 27.2.163
2 2920 27.0.526
3 3879 27.2.157
Or, la logique voudrait que les pièces en 1-10, 1-11, 1-12 viennent se placer après la pièce 1-9 ?? (dites-moi si je me trompe ...)
J'ai essayé pas mal de choses (conversions, complétions avec des 0, ...) mais rien n'y fait, c'est pour cela que je fais appel à vous pour essayer de me donner un coup de main.
A savoir que je souhaite le plus possible faire ce tri en SQL (sans algo de traitement après) car la base est utilisée par plusieurs applications que j'ai faites (au nombre de 4) dans différents langages (2 en Windev, 1 en ASP.NET et une autre en PHP) et j'ai pas trop envie de me repalucher le code dans chaque langage. D'autant que cette requête est exécutée dans plusieurs écrans de chaque application ....
Merci d'avance si vous pouvez au moins me donner une orientation, sinon une solution.
A bientôt