Avatar billede zetn Nybegynder
19. maj 2003 - 09:17 Der er 22 kommentarer og
3 løsninger

Stigende - faldenen

Hey. Hvis man nu skriver "oder by status" tager den den højeste først. Hvordan gør man så den tager den der har mindst status?

med venlig hilsen
Jacob Wulff
Avatar billede michael_stim Ekspert
19. maj 2003 - 09:20 #1
DESC
Avatar billede michael_stim Ekspert
19. maj 2003 - 09:21 #2
order by status DESC
Avatar billede eagleeye Praktikant
19. maj 2003 - 10:05 #3
ASC betyder stigne og dermed starter den med den mindste først.
DESC betyder fladene og dermed starter den med den største først.

SQL = "..... ORDER BY status ASC"

Hvis man ikke skriver ASC eller DESC skulle den gerne default bruge ASC.
Avatar billede oasen Nybegynder
19. maj 2003 - 10:18 #4
- og den kan du anvende på både talfelter, tekstfelter og datofelter.
Avatar billede zetn Nybegynder
19. maj 2003 - 10:27 #5
Hvis jeg har disse statusser:

10, 20, 30 og 100. så kommer mit udtræk til at se sådan her ud:

100
10
20
30

.... 100 burde gerne komme til sidst. Hvordan kan det være den ikke gør det?
Avatar billede oasen Nybegynder
19. maj 2003 - 10:43 #6
Fordi du skriver "...order by status desc"
Avatar billede eagleeye Praktikant
19. maj 2003 - 10:43 #7
Så er det fordi status er en tekst kolonne.
Avatar billede oasen Nybegynder
19. maj 2003 - 10:45 #8
Ja, glem hvad jeg sagde. Det var noget vrøvl.
Sortering på tal i tekstfelter sorteres lidt anderledes end man kunne forvente.
Avatar billede eagleeye Praktikant
19. maj 2003 - 10:53 #9
"Sortering på tal i tekstfelter sorteres lidt anderledes end man kunne forvente."

Nej faktisk ikke, den gør det helt rigtige. Man har jo netop fortalt det er en tekst kolonne. Den tager karakter for karakter og tjekker hvilken er størst. Hvis man har "Abe" og "B" i to kolonne er der ikke nogle som er i tvivl om hvilken kommer først. Hvis der står "100" og "9" vil 100 være mindre end 9 da den føste karakter "1" kommer før "9" i alfabetet (Ascii tabellen).
Avatar billede thomas_regin Nybegynder
19. maj 2003 - 10:53 #10
Hvis din kolonne er tekst, og du vil sortere på den i numerisk rækkefølge, så kan du lave noget smart:

Select * from MYTABLE order by Convert(int, status)

Mvh,

/thomas regin.
Avatar billede eagleeye Praktikant
19. maj 2003 - 10:54 #11
Så hvis du har det i en tekst kolonne må du lave en typecase til tal.:

SQL = "..... ORDER BY Int(status) ASC"
Avatar billede eagleeye Praktikant
19. maj 2003 - 10:54 #12
Eller lave data så de passer til kolonne typen: 010, 020, 030 og 100
Avatar billede oasen Nybegynder
19. maj 2003 - 11:01 #13
Ja, jeg kan godt se logikken i det. Men umiddelbart kan det måske undre, at 100 er større end 9 i den ene kolonne og ikke i den anden. Hvis du kan følge mig...
Avatar billede zetn Nybegynder
19. maj 2003 - 11:06 #14
Når jeg skriver min kode:

strSQLE = "SELECT * FROM elementer WHERE projektid = '" & id & "' ORDER BY int(status) ASC"
Set rz = Conn.Execute(strSQLE)

får jeg denne fejl meddelelse:

Fejltype:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
[Microsoft][ODBC Microsoft Access-driver] Datatyperne stemmer ikke overens i kriterieudtrykket.
/acomma2/admin.asp, line 1478


Any help?
Avatar billede eagleeye Praktikant
19. maj 2003 - 11:06 #15
Ja det kan jeg ;)
Avatar billede eagleeye Praktikant
19. maj 2003 - 11:08 #16
Hvis projektid er defineret som tal i tabellen skal der ikke ping ' omkring, det er kun for tekst kolonner der skal ' omkring. Status er så vidt jeg husker også et reserveret ord så der skal [] omkring.:

strSQLE = "SELECT * FROM elementer WHERE projektid = " & id & " ORDER BY int([status]) ASC"
Avatar billede zetn Nybegynder
19. maj 2003 - 14:29 #17
Får samme besked.
Avatar billede zetn Nybegynder
19. maj 2003 - 14:44 #18
altså fejlmeddelelse.
Avatar billede eagleeye Praktikant
19. maj 2003 - 14:46 #19
Hilken database er det og har du prøvet me det som /thomas regin. har vist med convert?
Avatar billede zetn Nybegynder
19. maj 2003 - 19:56 #20
Jeg bruger Access 2000. Ved det med convert skriver den et eller andet med at convert ikke kan bruges i den sammenhæng.
Avatar billede eagleeye Praktikant
20. maj 2003 - 08:40 #21
Prøv med Cint.

strSQLE = "SELECT * FROM elementer WHERE projektid = " & id & " ORDER BY Cint([status]) ASC"
Avatar billede zetn Nybegynder
26. maj 2003 - 20:53 #22
Det virker ikke. Den trækker dem bare tilfældig ud så.

Jeg har virkelig brug for det da det er til et system. nogle der har andre ideér?
Avatar billede eagleeye Praktikant
26. maj 2003 - 20:57 #23
Jeg har Access og denne ORDER BY Cint([status]) ASC  sorter så den med mindste værid i status kommer først.
Avatar billede zetn Nybegynder
26. maj 2003 - 21:20 #24
Jeg kan ikke bruge DESC og ASC med cint. Den smider bare det højeste førest.
Hvordan kan det være?
Avatar billede eagleeye Praktikant
26. maj 2003 - 21:24 #25
Det forstår jeg ikke helt prøv med uden [] omkring.
Har du nogle records hvor der ikke er et tal i kolonnen?

strSQL = "SELECT * FROM elementer WHERE projektid = " & id & " ORDER BY Cint(status) ASC"
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester