[SQL Server] Order by (a1,a2,b1,b2,aa1,aa2)

Pagina: 1
Acties:

  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 30-11 10:16
Met onderstaande SQL sorteer ik racks op letter volgorde met de cijfers in omgekeerde volgorde.
code:
1
2
3
4
5
6
7
a3
a2
a1
b3
b2
b1
enzv

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT
  Row.RowID,
  Row.Row,
  Rack.Rack
FROM
  Location,
  row,
  rack
WHERE
  rack.rowid = row.rowid
AND
  row.locationid = Location.LocationID
AND
  Location.Location = @Location
ORDER BY
  LEFT(Rack,LEN(Rack)-PATINDEX('%[0-9]%',Rack)),
  RIGHT(Rack,LEN(Rack)-PATINDEX('%[0-9]%',Rack)+1) DESC
Ik loop hiermee tegen een probleem aan, namelijk als ik na z3,z2,z1 nog meer racks heb zoals aa3,aa2,aa1.

Deze racks komen niet na z, maar na a te staan.

Hoe kan ik in de sql opgeven dat aa na z komt en niet na a?

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com


  • DigiK-oz
  • Registratie: December 2001
  • Laatst online: 26-11 15:50
Bij order by als eerste len(rack) opgeven?

Whatever


  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 30-11 10:16
Ik was te vroeg met het plaatsen van dit topic, ik heb de SQL aangepast met:
SQL:
1
2
3
4
5
ORDER BY
  LEN(Row),
  Row ASC,
  LEFT(Rack,LEN(Rack)-PATINDEX('%[0-9]%',Rack)),
  RIGHT(Rack,LEN(Rack)-PATINDEX('%[0-9]%',Rack)+1) DESC

Ik was al een tijdje aan het zoeken naar een oplossing, maar door een thread in een ander forum (gevonden met Google) werd ik aardig op weg geholpen en kwam ik tot bovenstaande oplossing.

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com


  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Zet ie nu dan niet iets als a11 in de buurt van aa1?

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 30-11 10:16
Grijze Vos schreef op zondag 08 april 2007 @ 14:39:
Zet ie nu dan niet iets als a11 in de buurt van aa1?
Nee, want ik sorteer op de lengte van kolom Row die alleen de letters bevat.

Anders zou je onderstaande SQL kunnen toepassen:
SQL:
1
2
3
4
ORDER BY
  LEN(LEFT(Rack,PATINDEX('%[0-9]%',Rack))), 
  LEFT(Rack,PATINDEX('%[0-9]%',Rack)-1) asc,
  RIGHT(Rack,LEN(Rack)-PATINDEX('%[0-9]%',Rack)+1) DESC

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com