IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Requête de tri alphabétique mais pas seulement!


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 36
    Points : 28
    Points
    28
    Par défaut Requête de tri alphabétique mais pas seulement!
    Bonjour,

    Je bloque sur le tri de la table suivante:
    code
    6/A
    6/B
    6/C
    6/AA
    6/AB
    6/AC
    6/A(a)
    6/A(b)
    6/A(c)

    Je ne parviens pas à trier dans cet ordre:

    code
    6/A
    6/A(a)
    6/A(b)
    6/A(c)
    6/B
    6/C
    6/AA
    6/AB
    6/AC

    Le problème est la gestion des (a), (b), (c)...

    Auriez-vous des pistes pour gérer ce cas?
    Merci!

  2. #2
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    Pas facile hein? Je bloque toujours...

  3. #3
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    ça serait facile si c'était bien modélisé, ce qui n'est pas le cas puisque votre colonne semble contenir plusieurs informations distinctes...

    Il faudrait du coup plus de détails sur le tri souhaité. Vous n'expliquez par exemple par pourquoi AA doit se retrouver après B !

    Est-ce que votre exemple est exhaustif ? (ou peut on par exemple avoir aussi AA(a),...)

    Une petite explication du contexte serait également la bienvenue. A première vue, il pourrait sembler plus pertinent laisser à l'applicatif la charge de ce tri exotique.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    Je suis bien d'accord sur l'aspect exotique! Malheureusement on a pas toujours le choix. Pour expliquer un peu plus: ce sont des codes d'entités, qui ont commencé à être codés de A à Z, puis AA, AB, AC... Puis certaines entités ont été dupliquées et le management a cru bon d'attribuer aux duplicatas des (a), (b),... Voilà pourquoi je voudrais trier en A, A(a), A(b), B .. ZZ, AA, AB, ... AZ, BA, BB, ... CA, CA(a), CA(b), ...

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Une piste proposée en Oracle à adapter au SGBD utilisé:
    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
    SQL>
     12  select c, coalesce(substr(c, 1,instr(c,'(',1)-1),c)
     13    from t
     14   order by length(coalesce(substr(c, 1,instr(c,'(',1)-1),c)), c;
     
    C      COALESCE(SUBSTR(C,1,INST
    ------ ------------------------
    6/A    6/A
    6/A(a) 6/A
    6/A(b) 6/A
    6/A(c) 6/A
    6/B    6/B
    6/C    6/C
    6/AA   6/AA
    6/AB   6/AB
    6/AC   6/AC
     
    9 rows selected.
     
    SQL>
    Sinon créez une table contenant les codes et une colonne ordre.
    Je ne tiens pas compte du 6/ qui peut compliquer un peu le tri.

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Alors si effectivement vous n'avez pas le choix, vous pouvez faire un truc dans ce genre (exemple pour SQL Server) :

    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
     
    ORDER BY 
    		COALESCE(
    			NULLIF(
    				LEN(
    					LEFT(
    							LaColonne
    						,	CHARINDEX( '(',LaColonne) 
    					)
    				)
    				,
    				0
    			) -1
    			,
    			LEN(LaColonne)
    		)
    		,
    		LaColonne

  7. #7
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 422
    Points
    7 422
    Billets dans le blog
    1
    Par défaut
    Ce que vous cherchez, c'est un tri en ordre "naturel" ou "humain".

    C'est à dire que "image 10" n'arrive pas entre "image 1" et "image 2" mais entre la 9 et la 11. Ceci s'applique effectivement aussi aux éléments de ponctuation que sont les tirets, parenthèses, etc. mais pas aux points ou espaces par exemple, qui sont des éléments de séparation.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    Merci à tous pour vos réponses, je vais étudier tout ça et je reviens avec la solution (si j'ai!).

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/02/2008, 23h02
  2. [Wamp] Requête passant sous phpmyadmin mais pas en script
    Par Lordsephiroth dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 09/10/2007, 18h04
  3. Réponses: 5
    Dernier message: 13/08/2007, 13h44
  4. erreur de requête SQL avec ASP mais pas dans Access
    Par csszzen dans le forum Langage SQL
    Réponses: 6
    Dernier message: 16/03/2007, 10h07
  5. Requête OK sur easyphp mais pas sur mon hébergeur
    Par Pgs dans le forum Requêtes
    Réponses: 3
    Dernier message: 30/10/2006, 20h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo