Jag har ett antal frågor som har nummer 1, 2 ,3 osv. Problemet är att en del har även bokstäver, 6a, 6b.. Hur ska man kunna sortera dom så att dom kommer i ordning i en rapport? Ett sätt är att spara siffran i ett numeriskt fält i databasen och bokstaven i ett textfält. Tack för kreativa idéer. Synd att det inte gick att göra direkt med nån typecasting liknande - TeckenNum I princip kan du lösa det genom att: Baserat på antagandet att " 9" < " 10" så kan du <i>padda</i> med mellanslag framför numret. Idén med ett fält i tabellen var jättesmart. Fungerar i vanliga frågor men jag får inte till det i en korsfråga. Sortera siffror,bokstäver
//evaSv: Sortera siffror,bokstäver
/JohanSv:Sortera siffror,bokstäver
//evaSv: Sortera siffror,bokstäver
1. Ta reda på max antal bokstäver (förmodligen 1, men låt säga att det finns 27 varianter, då kommer sannolikt aa efter z? I så fall är det två bokstäver) Kalla det X.
2. Om en rad har färre bokstäver än X på slutet, lägg till blanktecken mellan siffrorna och bokstäverna så att blanksteg + bokstäver = X.
3. Lägg på 0:or först så att alla rader blir lika långa.
4. Sen kan du sortera på raden.
Dvs:
1,2,3 -> "1","2","3"
1,2a,3 -> "1 ", "2a", "3 "
1a,2ab,3 -> "1 a", "2ab", "3 "
Alternativt - lite snyggare:
1. Räkna max antal bokstäver, kalla det X.
2. Ersätt bokstäver med deras position i alfabetet (alt. ascii-kod av lowercase av bokstaven), och multiplicera talet med 100 ^ antalet tecken som saknas.
Alltså,
1,2,3 -> 1,2,3
1,2a,3 -> 100, 201, 300
1,2ab,3 -> 10000, 20102, 30000Sv: Sortera siffror,bokstäver
Antag att du bara skall hantera värden upp till 999.
Lägg till följande funktion i en modul i Access:
Public Function Sortable(Value As Variant) As Variant
Dim i As Long
Dim Result As String * 3
If IsNull(Value) Then
Sortable = Null
Else
For i = 1 To Len(Value)
If Not IsNumeric(Mid(Value, i, 1)) Then
Exit For
End If
Next
RSet Result = Left(Value, i - 1)
Result = Result + Mid(Value, i)
Sortable = Result
End If
End Function
I din SQL fråga skriv:
SELECT *
FROM TableName
ORDER BY Sortable(ColumnName)
Då bör sorterings ordningen vara:
1
1a
1b
...
1z
2
2a
...
2z
...
9z
...
10
10a
10b
...
10z
20
20a
20b
...
20z
...
99z
100
100a
100b
...
999z
Dock kommer dubelbokstäver sorteras fel: (" 1aa" > " 1a") and (" 1aa" < " 1b") vilket ger
1a
1aa
1ab
1ac
2b
2ba
2bb
2bc
Sv:Sortera siffror,bokstäver
Har lagt in funktionen men får inte skriva select * !! Mitt VB envisas med att det efter select måste komma ett case. Jag fattar ingenting. Jag kan inte ens klistar in exixterande fungerande kod
//eva