Hejsan, vad kör du för databas? Det kommer att bli en Access-db. Andreas: Christoffer: SELECT blablabla Ett nytt kommando för mig...! :) Om det är av vikt att kunna sortera Problemet är att nummerlängden kan variera mellan 1 till 10 siffror... Det gör om ett värde från en datatyp till en annan?.. Inte speciellt avancerat. Eftersom strängar sorteras inbördes genom att jämföra tecknet längst till vänster, därefter nästa tecken osv så kommer sorteringen att bli den du vill. Tackar för svaret! Jag har gjort en liten testdatabas i Access där jag lagt in de fyra exempel-prefixen i. varchar är nog inte den korrekta text-typen i access, det är text som gäller för längder upp till 255 tecken, därefter får man använda notes istället som är av binär typ Om du använder Access: CStr(prefix) fungerade perfekt!!Undring om sortering i SQL...
Jag sitter och klurar lite på hur man skulle kunna lösa följande:
Om man har en tabell med två kolumner (Destination & Prefix).
I Destination står just destinationsnamn, och i Prefix står prefixet (telefoni) för denna destination.
Nu till problemet!
Jag vill att följande information listas som den står (sorterat på destination, prefix):
Antigua & Barbuda 1268
Antigua & Barbuda mobiles 1268404
Antigua & Barbuda mobiles 1268406
Antigua & Barbuda mobiles 1268409
Antigua & Barbuda mobiles 1268464
Antigua & Barbuda mobiles 1268480
Antigua & Barbuda mobiles 1268481
Antigua & Barbuda mobiles 1268686
Antigua & Barbuda mobiles 126872
Antigua & Barbuda mobiles 126873
Antigua & Barbuda mobiles 126893
Men om jag skulle köra en SQL-sträng som sorterar på först destination och sedan prefix, så skulle det bli följande (om jag inte tror fel):
Antigua & Barbuda 1268
Antigua & Barbuda mobiles 126872
Antigua & Barbuda mobiles 126873
Antigua & Barbuda mobiles 126893
Antigua & Barbuda mobiles 1268404
Antigua & Barbuda mobiles 1268406
Antigua & Barbuda mobiles 1268409
Antigua & Barbuda mobiles 1268464
Antigua & Barbuda mobiles 1268480
Antigua & Barbuda mobiles 1268481
Antigua & Barbuda mobiles 1268686
Eftersom 126893 är mindre än 1268404, så hamnar ju 126893 före rent logiskt...
Men hur ska jag göra om jag vill ha det som i det övre exemplet (12684XXX ligger ju faktiskt före 12689XXX)?
Det är säkert ganska enkelt, men jag har inte börjat bygga applikationen ännu...! :)
Jag vill ju gärna veta att det går att lösa innan jag lägger ner tid på det!
Tacksam för svar!
TommySv: Undring om sortering i SQL...
kör du Access så kan du lägga till Order By Prefix DESC i anslutningen till tabellen...
tror det ska vara DESC, om det inte är det så kan du testa med ASC..
jag vet inte om Order By Prefix DESC funkar i anslutning till mySQL databas.. men jag kan ha fel.. har inte använt mySQL så mycket.
jag vet inte äns om det är detta du är ute efter, så jag kanske är helt ute och cyklar :)
mvh
//JonnieSv: Undring om sortering i SQL...
Dock så sorterar ASC resp. DESC i stigande eller fallande ordning.
I den eventuella applikationen, kommer det att vara varierande längd på prefixen som tillhör samma destination.
Men om man då tar dessa fyra:
123
1241
125
12678
...och sorterar ASC blir det:
123
125
1241
12678
...och DESC:
12678
1241
125
123
Men jag vill ha dom så här:
123
1241
125
12678
Så man kan se det som man skulle sortera 'från vänster' på prefix...
...hur nu detta ska gå till...
//TommySv: Undring om sortering i SQL...
Fälttypen får nog bli tal (utan decimaler)...
...finns inte så mycket annat att välja på (förutom text)...!
//TommySv: Undring om sortering i SQL...
Hur lägger jag in det i en sträng (är det en array du tänkte på)?
Och hur sorterar man den på det sätt som jag söker?
Ett exempel, please...! :)
Vet inte om det spelar nån' roll, men det kommer att bli åtskilliga tusen rader i databasen, och man ska kunna välja på att visa hela listan (jag tänkte på servern)...
//TommySv: Undring om sortering i SQL...
FROM blablabla
ORDER BY destination ASC, CAST(prefix AS varchar(10)) ASCSv: Undring om sortering i SQL...
Kanske en dum fråga, men vad gör / hur fungerar CAST-biten egentligen??
//TommySv: Undring om sortering i SQL...
123
1241
125
12678
och inte i strikt nummerordning så antar jag att det finns en logisk anledning till detta. 123 är före 12441 som i sin tur är före 125. Det tycks som att de tre första positionerna betyder något speciellt i hela prefixet. Detta skulle jag tolka som att de tre första tecknen läggs i en egen kolumn och de två eller inga tecknet i slutet läggs i en egen kolumn. Jmf att lägga hela telefonnummret i en kolumn eller skilja på riktnummer och lokalnummer.
Gör du denna uppdelning får du även en högre normalisering på din databas. En kolumn skall vara atomär, dvs värdet skall endast stå för en sak.Sv: Undring om sortering i SQL...
I sådana fall skulle man behöva 10 kolumner i databasen bara för prefixen...
...kanske inte så bra lösning (men det skulle fungera!)... :)
Jag får underlag inom en vecka, så jag tänkte börja labba lite då...
//TommySv: Undring om sortering i SQL...
Till Roger: Det frågan gäller här har väl egentligen inte med just de tre första tecknen att göra uatn snarare att han vill sortera tal som om de vore strängar.Sv: Undring om sortering i SQL...
Jag ska börja testa så fort jag fått underlaget!
Hör av mig så fort jag vet hur det gått...!
M.v.h.
TommySv: Undring om sortering i SQL...
Sedan testkörde jag SQL-frågan i Access, men får följande felmeddelande:
Syntax error (missing operator) in query expression 'CAST(prefix AS varchar(10))'.
Frågan ser ut såhär:
SELECT * FROM banding ORDER BY dest ASC, CAST(prefix AS varchar(10)) ASC
När jag trycker 'OK' så markeras AS i queryn...
Är det nåt' jag missat??
(Helt klart har jag gjort nåt' fel...)
//TommySv: Undring om sortering i SQL...
Sv: Undring om sortering i SQL...
SELECT * FROM banding ORDER BY dest ASC, CStr(prefix) ASC
Annars kan du ju ändra datatypen för kolumnen till text. Bör funka för alla databaser.Sv: Undring om sortering i SQL...
Tack så mycket för hjälpen!!
Tommy