2011-04-11 3 views
2

Je dois commander une table conditionnée par la date et je ne peux pas le faire! :(Ordre SQL par

J'ai un champ (codigo) qui si l'année de la date (passé par le paramètre) est inférieure à 2010 alors il est composé comme ceci: "FAC-00123-10", puis i nedd à l'ordre par ce « 0» ...

Sinon, si le code de l'année est plus grand que 2010, le champ (Codigo) est créé comme celui-ci « FT 11/123 », puis je commander par ce « 123 »

Comment puis-je faire ?!

Répondre

3

vous pouvez utiliser une instruction case when de décider quoi commander par, celui-ci utilise une sous-chaîne simple, mais en réalité, ce n'est probablement pas assez bon et vous pouvez nee d pour analyser le bit, vous êtes intéressé par un peu mieux ..

select * from table order by 
    case when DatePart(year,@date) < 2010 then substring(codigo,4,5) 
     else substring(condigo,3,2) end 
+0

juste moi bit au poinçon ... ma réponse exactement ... –

+0

La comparaison doit être '<= 2010'. (Je sais, le PO a dit: «inférieur à», mais la valeur de l'échantillon implique qu'il devrait être «inférieur ou égal à».) Le «alors» 'substring' devrait être' substring (codigo, 5, 5) ' , et le 'else', 'substring (codigo, 7, len (codigo) - 6)'. –