2010-08-20 16 views
1

La requête est en cours d'exécution JeJe suis incapable de trier les données par ordre croissant en utilisant ORDER BY ASC

select accountid from general order by accountid ASC 

Le résultat que je reçois est

accountid 
------------ 
1 
1001 
1002 
10021 
10026 
1006 
1007 

Pourquoi est-il pas correctement ordonne? C'est une question simple et je suis complètement perdu sur la façon dont je peux résoudre ce problème.

+3

Je ne suis personne SQL, mais si accountid était un type de chaîne, ce ne serait pas le tri par ordre croissant? pourrait-il être le type n'est pas ce que vous pensez qu'il est? – linuxuser27

+1

En théorie, vous pouvez utiliser 'CAST (accountid AS INTEGER)' dans les listes select-list et order-by pour obtenir l'ordre numérique souhaité. Mais cela échouera sur le compte '1008A'. –

Répondre

11

Le type de colonne doit être numérique (int, number, bigint, etc) type ..

On dirait en ce moment est une colonne de type VARCHAR ... qui est triée comme un dictionnaire ...

+1

si vous ne pouvez pas changer le type de colonne, vous pouvez commander par to_number (account_id) (qui est peut-être assez lent) – Thilo

+0

oui son varchar mais pourquoi il se comporte comme ça ne peut pas nous trier la colonne avec le type varchar – farkhunda

+4

@farkhunda. Si vous triez varchar, il trie comme des chaînes (pas de nombres) et la sortie affichée est le résultat – Thilo

0

Si SolutionID est la colonne VARCHAR et si elle a quelque chose comme Sol0, Sol1, SoL2, .... alors si vous devez trier la colonne ... utiliser le code ci-dessous

cast (substring(SolutionID,4,10) as integer) desc

0

Essayez ceci, cela fonctionne:

select accountid from general order by convert(int, accountid) ASC