The order needs to start with the length of the particular partnumber and then by the part. Make sense?
The order you show is not by lenght and then partnumber value. Looks like you really want a sort First Order on the 1st 9 caracters of the pn string, then by the Length of the string, then by the last 2 cahracaters of the string if the length is greator then 9. Here is a query that demonstrates this sort on a one column table. If you have PNs longer than 11 characters then you will have to increase the 2nd condition of the MID function. Hope this helps.
/* Query returns string function results with desired sort */
select distinct `PartNumber`,
Left(`PartNumber`,9) as `PartL10`,
Mid(`PartNumber`,10,2) as `PartR2`,
Length(`PartNumber`) as `LenPart`
from `partnumber_tbl`
order by Left(`PartNumber`, 9) ASC,
Length(`PartNumber`) ASC,
Mid(`PartNumber`,10,2) ASC,
Length(`PartNumber`) ASC;
/* Query to return Only the PartNumber field */
select distinct `PartNumber`
from `partnumber_tbl`
order by Left(`PartNumber`, 9) ASC,
Length(`PartNumber`) ASC,
Mid(`PartNumber`,10,2) ASC,
Length(`PartNumber`) ASC;
.