2010-05-17 8 views
3
STD-00-1 

STD-00-2 

STD-00-10 

STD-00-1(T) 

STD-00-2(T) 

STD-00-10(T) 

STD-05-1 

STD-05-2 

STD-05-10 

STD-05-1(T) 

STD-05-2(T) 

STD-05-10(T) 

WIP-00-1 

WIP-00-1(T) 

Quelle est la meilleure façon d'y parvenir?SQL Instruction de tri nvarchar

Répondre

1

La meilleure façon est que vous ne devriez exécuter que dans votre requête sql.

select name from table_name ORDER By name 
2

Qu'en est-

SELECT * FROM [TABLE] ORDER BY [COLUMN] 

La prochaine fois, s'il vous plaît être un peu plus précis.

+0

Cela mettra 'STD-00-10' avant' STD-00-2' – Quassnoi

2

Vous devez analyser les pièces et trier. L'exemple de requête crée les champs v1, v2, ... avec les données sur lesquelles vous pouvez trier. v1 contient STD, v2 contient le premier nombre, v3 est 1 si (T) est présent, et v4 est le deuxième nombre. La requête externe utilise ensuite ces champs pour trier, comme:

select YourColumn 
from (
    select substring(YourColumn,1,3) as v1 
    ,  cast(substring(YourColumn,5,2) as int) as v2 
    ,  case when YourColumn like '%(T)%' then 1 else 0 end as v3 
    ,  cast(replace(substring(YourColumn,8,len(YourColumn)-7),'(T)','') 
       as int) as v4 
    ,  YourColumn 
    from YourTable 
) sub 
order by v1, v2, v3, v4 

Pour vos données par exemple, cela retourne:

v1 v2 v3 v4 YourColumn  
STD 0 0 1 STD-00-1  
STD 0 0 2 STD-00-2  
STD 0 0 10 STD-00-10  
STD 0 1 1 STD-00-1(T)  
STD 0 1 2 STD-00-2(T)  
STD 0 1 10 STD-00-10(T) 
STD 5 0 1 STD-05-1  
STD 5 0 2 STD-05-2  
STD 5 0 10 STD-05-10  
STD 5 1 1 STD-05-1(T)  
STD 5 1 2 STD-05-2(T)  
STD 5 1 10 STD-05-10(T) 
WIP 0 0 1 WIP-00-1  
WIP 0 1 1 WIP-00-1(T)  

quelques réglages supplémentaires pourraient être nécessaires.

1

@Andomar's answer si vous ne pouvez pas modifier le schéma.

Si toutefois vous pouvez changer le schéma, je suggère la meilleure chose à faire serait:

  • séparer les différentes parties dans des colonnes distinctes, correctement tapé les données qu'ils détiennent effectivement
  • pour maintenir les fonctionnalités existantes, ont une nouvelle colonne calculée qui leur concaténation, les séparateurs et - coulée selon le cas
  • ORDER BY les colonnes séparément lorsque vous voulez trier