Toon posts:

[SQL Oracle db] order by ...

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een kolom die bevat de volgende rijen:
A2 A13 B34 C43 Z122 AA12 AB 23
Nu wil ik deze in bovenstaande volgorde hebben uit de select die ik maak
echter komt deze als volgt eruit:
A2 A13 AA12 AB 23 B34 C43 Z122

Ik heb ook al geprobeerd om een decode te gebruiken in de order by
dus order by

code:
1
2
3
4
5
6
   order by decode(a.cel,'A', 1,
                 'B', 2, 
                 'C', 3,      
                   ....
                 'Z', 26, 27),
                 a.cel;


Maar hiermee lukt het me ook niet.

[ Voor 3% gewijzigd door Verwijderd op 08-11-2006 10:25 ]


  • Siliakus
  • Registratie: November 2000
  • Laatst online: 14:42
Ik denk niet dat het een lekkere oplossing is om dit in de select statement te doen.. Ik zou de sortering liever in je applicatie afhandelen, of desnoods een pl/sql functie maken.

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 17:46

Robtimus

me Robtimus no like you

Misschien denk ik te eenvoudig, maar:
SQL:
1
ORDER BY LENGTH(a.cel), a.cel


Hmm, nu ik erover nadenk is dit idd te eenvoudig: B1 komt zo voor A12. Maar misschien kun je er iets mee.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • Dido
  • Registratie: Maart 2002
  • Laatst online: 19:15

Dido

heforshe

Wat voor sortering wil je precies? Dit ziet er namelijk erg ingewikkeld uit.

• Oplopend op lengte van het alpha-deel
• Uitgezonderd lengte alpha-deel = 0, die moet achteraan
• Dan oplopend op inhoud van het alpha-deel
• Vervolgens aflopend op het numerieke deel

Zoiets? Ik word nieuwsgierig naar de toepassing van zo'n sortering :P

Wat betekent mijn avatar?


Verwijderd

Verwijderd schreef op woensdag 08 november 2006 @ 10:24:
Ik heb een kolom die bevat de volgende rijen:
A2 A13 B34 C43 Z122 AA12 AB 23
Nu wil ik deze in bovenstaande volgorde hebben uit de select die ik maak
echter komt deze als volgt eruit:
A2 A13 AA12 AB 23 B34 C43 Z122

Ik heb ook al geprobeerd om een decode te gebruiken in de order by
dus order by

code:
1
2
3
4
5
6
   order by decode(a.cel,'A', 1,
                 'B', 2, 
                 'C', 3,      
                   ....
                 'Z', 26, 27),
                 a.cel;


Maar hiermee lukt het me ook niet.
ik weet absoluut niet wat je wil bereiken maar is
http://www.techonthenet.com/oracle/functions/ascii.php niet iets nuttiger dan die decode?

En wat wil je juist bereiken?

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
ORDER BY
   CASE WHEN ascii(substr(a.cel, 1, 1)) BETWEEN ascii('0') AND ascii('9')
             THEN 1000+ ASCII(substr(a.cel, 1,1)
             ELSE ASCII(substr(a.cel, 1,1) -- A-Z is lower then the 1000 + (ASCII(number) values.
   END
  ,CASE WHEN ascii(substr(a.cel, 2, 1)) BETWEEN ascii('0') AND ascii('9')
             THEN 1000+ ASCII(substr(a.cel, 2,1)
             ELSE ASCII(substr(a.cel, 2,1) -- A-Z is lower then the 1000 + (ASCII(number) values.
   END
  ,CASE WHEN ascii(substr(a.cel, 3, 1)) BETWEEN ascii('0') AND ascii('9')
             THEN 1000+ ASCII(substr(a.cel, 3,1)
             ELSE ASCII(substr(a.cel, 3,1) -- A-Z is lower then the 1000 + (ASCII(number) values.
   END


zoiets?

Leg anders even met woorden uit wat je wil bereiken...

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 17:46

Robtimus

me Robtimus no like you

Verwijderd schreef op donderdag 09 november 2006 @ 10:50:
Leg anders even met woorden uit wat je wil bereiken...
Volgens mij wil hij een sortering zoals in Excel.
Dus A1...A99, B1..B99, ..., Z1...Z99, AA1...AA99, AB1...AB99 (waarbij 99 gewoon een random upper bound is).

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Verwijderd

in t-sql zou ik gewoon een dynamisch stukje sql maken en dat executen. De volgorde van kolomen kun je dan ophalen door in de systeemtabellen de kolomnamen op te halen en die te sorteren.

dit kan ook in Oracle, heb ik alleen nog niet gedaan ;)

[ Voor 13% gewijzigd door Verwijderd op 09-11-2006 12:17 ]

Pagina: 1