webForumDet fria alternativet

Problem med sortering i fält innehållandes bokstäver / siffror

Databaser & SQL

7 svar · 1 013 visningar · startad av MickeA.com

Medlem sedan feb. 20034 441 inlägg
Frågan#1

Tja!

Ska skriva ut två kolumner från en Accessdatabas. Namnen på dessa är "Adress" resp. "Gatunummer".

Båda är av typen "text", då "Gatunummer" kan innehålla tex. "39A".

Nu har jag följande SQL fråga för att plocka ut det här:

strSQL = "SELECT * FROM tbl_hiss WHERE LEFT(Hiss_Adress, 1) = '" & FixSQL(Request.Querystring("b")) & "' ORDER BY Hiss_Adress, Hiss_Gatunummer ASC"

Problemet är att resultatet blir:

Birgerjarlsgatan 108
Birgerjarlsgatan 10

Det blir lite fel alltså, eftersom 10 kommer före 108, samt att 39A ska finnas därimellan, men hamnar på ett helt annat ställe.

Detta *bör* väl bero på att datatypen är just av typen "text"?
Nu behöver jag iaf. hjälp med tex. en funktion för att fixa det här, det vore himla bra.

Tack!

Medlem sedan mars 20034 471 inlägg
#2

Skälet till att det blir "fel" är att i textfält får du sk lexikografisk sortering (dvs i bokstavsordning). Och tecknet "1" < tecknet "3".

När dina rader om Birgerjarlsgatan sorteras så jämförs de bokstav för bokstav. Ingen skillnad förrän siffrorna hittas.

Birgerjarlsgatan 108
Birgerjarlsgatan 10
Birgerjarlsgatan 39A

Eftersom "1" < "3" så hamnar 108 och 10 före 39A.

Vad du gör åt det är värre. Det enda jag kommer på är att du delar upp det i tre kolumner:
Gatuadress, Nr, Uppgång och sorterar på Gatuadress, Nr, Uppgång
eftersom det inte kan stå något annat än siffror i ett fält som ska sorteras nummeriskt.

Möjligen kan du dela upp fälten och komma åt siffrorna på något annat sätt... Vet ej.

Medlem sedan feb. 20034 441 inlägg
#3

Ok, det var det jag misstänkte, AjAj...
Problemet är bara att jag är på tok för slö för att orka sitta och manuellt sära på den här kolumnen, för det rör sig i nuläget om 1400 fält.

Ska höra vad dom säger på kontoret på måndag ang. det här.
Tack för hjälpen!

Medlem sedan sep. 200542 inlägg
#4

Hej!

Jag sitter med exakt samma problem som MickeA.com hade. Har delat upp mina "nummer" i en textdel och en numerisk del och kan nu sortera allt så som jag önskar.

Mitt problem är dock att denna gatuinformation återfinns (kopplat) i en mängd andra frågor. För att slippa baka in den rätt bökiga SQL sortering igen i alla dessa frågor hade jag hoppats kunna dela upp frågorna. Dels i en del som skapar gatunamn och gatunummer sorterat Qry1 som jag sedan kopplar ihop med mina övriga frågor Qry2, Qry3 osv.

När jag gör det så tappar jag dock den sortering som finns i Qry1. Min tanke var då att skapa en beräknat fält i Qry1 som blir en slags sorteringsindex. Alltså ett numeriskt fält som ökar efter den sortering jag åstadkommit i Qry1. Går det att göra ett sådant?

Dvs går det att ha ett beräknat fält som blir som en radnumrering efter sortingen man valt.

Tabell som Qry1 baseras på:

-------------------------------------------------
| id | data_som_ska_sorteras | sorterings_index |
|  1 |                   bbb |                  |
|  2 |                   ccc |                  |
|  3 |                   aaa |                  |
|  4 |                   abc |                  |
|  5 |                   xxx |                  |
|  6 |                   yyy |                  |
|  7 |                   zzz |                  |
-------------------------------------------------

Qry1 efter sortering

-------------------------------------------------
| id | data_som_ska_sorteras | sorterings_index |
|  3 |                   aaa |                1 |
|  4 |                   abc |                2 |
|  1 |                   bbb |                3 |
|  2 |                   ccc |                4 |
|  5 |                   xxx |                5 |
|  6 |                   yyy |                6 |
|  7 |                   zzz |                7 |
-------------------------------------------------

Glömde säga att jag kör MS Access.

Medlem sedan mars 20034 471 inlägg
#5

Jag kan inte Access så jag har inget svar på din egentliga fråga, men... Varför kan du inte sortera även Query 2 och 3 med:
SORT BY data_som_ska_sorteras ?

Medlem sedan sep. 200542 inlägg
#6

Det är jag som förklarar mig dåligt. Gör ett nytt försök här.

Nedan ser du tabellen och resultatet av en query som jag skapat som sorterar data enligt vad jag behöver. Denna query är lite krånglig och lång och istället för att behöva använda den varenda gång jag behöver koppla informationen i Tabell vill jag kunna använda Qry1 som redan är rätt sorterad.

Problemet är att när jag kopplar mot Qry1 har jag inget bra att sortera efter. Försöker jag sortera efter data_som_ska_sorteras så blir det fel. Min tanke var att man kanske kunde skapa ett beräknat fält sorterings_index som man spar undan och refererar till vid sorteringen. Värderna i detta fält måste dock skapas och det är det jag inte vet hur man gör. :r

Tabell
------------------------------------------------------------------------------
| id | gata      | prefix_alpha | perfix_numeric | suffix | sorterings_index |
|  1 | Storgatan |            a |                |      1 |                  |
|  2 | Storgatan |              |              1 |      1 |                  |
|  3 | Storgatan |              |              1 |      2 |                  |
|  4 | Ågatan    |           ga |                |      1 |                  |
|  5 | Storgatan |              |              2 |      1 |                  |
|  6 | Storgatan |              |              2 |      2 |                  |
|  7 | Ågatan    |            a |                |      1 |                  |
|  8 | Ågatan    |              |              1 |      1 |                  |
|  9 | Ågatan    |              |              1 |      2 |                  |
------------------------------------------------------------------------------

Qry1
-------------------------------------------------
| id | data_som_ska_sorteras | sorterings_index |
|  1 |         Storgatan a:1 |                1 |
|  2 |         Storgatan 1:1 |                2 |
|  3 |         Storgatan 1:2 |                3 |
|  5 |         Storgatan 2:1 |                4 |
|  6 |         Storgatan 2:2 |                5 |
|  7 |            Ågatan a:1 |                6 |
|  4 |           Ågatan ga:1 |                7 |
|  8 |            Ågatan 1:1 |                8 |
|  9 |            Ågatan 1:2 |                9 |
-------------------------------------------------
Medlem sedan mars 20034 471 inlägg
#7

Hmm... För mig förefaller det som om du kan använda ID i Query_1. Det är ju minst för det som ska ligga först osv...

Medlem sedan sep. 200542 inlägg
#8

Tyvärr går ej ID att använda. Dels pga att data inte ligger lagrat så nu men desto viktigare pga att man inte har någon kontroll på vad som händer när ny data lägs till i tabellerna. Dvs när nya gatuadresser matas in vet man inte om Allévägen kommer få ett mindre ID än Östergatan.

264 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)