SQL trier des nombres "logiquement" [Résolu/Fermé]
Signaler
Vincent
-
Christounet
Christounet
- Messages postés
- 1263
- Date d'inscription
- mercredi 26 septembre 2007
- Statut
- Membre
- Dernière intervention
- 29 juillet 2010
Bonjour,
Une question toute simple dont je n'ai pas la réponse ;)
J'ai une table :
ID | Dept | Nom
1 | 1 | Ain
2 | 58 | Nièvre
3 | 10 | Aube
4 | 2 | Aisne
Quand je fais un ORDER BY Dept, j'ai
ID | Dept | Nom
1 | 1 | Ain
3 | 10 | Aube
4 | 2 | Aisne
2 | 58 | Nièvre
Alors que j'ai besoin de :
ID | Dept | Nom
1 | 1 | Ain
4 | 2 | Aisne
3 | 10 | Aube
2 | 58 | Nièvre
Comment faire pour trier de la bonne manière ?
Merci de votre aide
Vincent
Une question toute simple dont je n'ai pas la réponse ;)
J'ai une table :
ID | Dept | Nom
1 | 1 | Ain
2 | 58 | Nièvre
3 | 10 | Aube
4 | 2 | Aisne
Quand je fais un ORDER BY Dept, j'ai
ID | Dept | Nom
1 | 1 | Ain
3 | 10 | Aube
4 | 2 | Aisne
2 | 58 | Nièvre
Alors que j'ai besoin de :
ID | Dept | Nom
1 | 1 | Ain
4 | 2 | Aisne
3 | 10 | Aube
2 | 58 | Nièvre
Comment faire pour trier de la bonne manière ?
Merci de votre aide
Vincent
A voir également:
- SQL trier des nombres "logiquement"
- SQL trier des nombres "logiquement" ✓ - Forum - Programmation
- Excel trier par nombre d'occurence ✓ - Forum - Excel
- Compter nombre d'occurrence plusieurs mots et les classer excel - Forum - Excel
- Sql tri - Articles
- Sql compter le nombre d'occurence d'une valeur - Forum - Bases de données
5 réponses
Christounet
- Messages postés
- 1263
- Date d'inscription
- mercredi 26 septembre 2007
- Statut
- Membre
- Dernière intervention
- 29 juillet 2010
Bonjour Vincent,
En fait tu ne peux pas convertir ta colonne vers un nombre car elle contient parfois des lettres, par contre le code suivant devrait faire ce que tu veux
L'instruction LPAD va rajouter un ou deux zéros ou aucun devant la variable Dept
Exemple:
Dept = 1 , LPAD(Dept,2,'00') = 01
Dept = 10 , LPAD(Dept,2,'00') = 10
A plus
En fait tu ne peux pas convertir ta colonne vers un nombre car elle contient parfois des lettres, par contre le code suivant devrait faire ce que tu veux
SELECT id , Dept, Nom FROM nomdetatable ORDER BY LPAD(Dept,2,'00')
L'instruction LPAD va rajouter un ou deux zéros ou aucun devant la variable Dept
Exemple:
Dept = 1 , LPAD(Dept,2,'00') = 01
Dept = 10 , LPAD(Dept,2,'00') = 10
A plus
Christounet
- Messages postés
- 1263
- Date d'inscription
- mercredi 26 septembre 2007
- Statut
- Membre
- Dernière intervention
- 29 juillet 2010
Bonjour,
Avant de pouvoir t'aider, j'ai besoin de deux petits renseignements:
1°) Quelle base de données utilises-tu ? (Mysql , Access, Sql Server, ....)
2°) De quel type est la colonne Dept ? (Numérique, Caractère , ...)
Merci et a plus
Avant de pouvoir t'aider, j'ai besoin de deux petits renseignements:
1°) Quelle base de données utilises-tu ? (Mysql , Access, Sql Server, ....)
2°) De quel type est la colonne Dept ? (Numérique, Caractère , ...)
Merci et a plus
toto
Bonjour
Tu as sûrement défini ton champ Dept comme étant un type texte, et tu veux le trier comme numérique.
Tu peux modifier son type qpour qu'il soit numérique (ce qui semble plus logique, mais peut avoir des conséquences ailleurs dans ton application) ou forcer explicitement la manière de trier :
ORDER BY CAST (`Dept` AS UNSIGNED)
Tu as sûrement défini ton champ Dept comme étant un type texte, et tu veux le trier comme numérique.
Tu peux modifier son type qpour qu'il soit numérique (ce qui semble plus logique, mais peut avoir des conséquences ailleurs dans ton application) ou forcer explicitement la manière de trier :
ORDER BY CAST (`Dept` AS UNSIGNED)
Vincent
Re ;)
Merci de vos réponses !
Christounet : j'utilise mysql et le champ est texte à cause de la corse (2A et 2B).
Toto : Sql me renvoie une erreur avec "UNSIGNED".
Vous y voyez plus clair ???
Vincent
Merci de vos réponses !
Christounet : j'utilise mysql et le champ est texte à cause de la corse (2A et 2B).
Toto : Sql me renvoie une erreur avec "UNSIGNED".
Vous y voyez plus clair ???
Vincent