2013-09-29 5 views
0

je la requête suivante:ordre sql par des valeurs codées en dur

select 'junior' as type, value 
from mytable 
union 
select 'intermediate' as type, value 
from mytable 
union 
select 'senior' as type, value 
from mytable 

qui renvoie les données suivantes:

type   value 

Intermediate  10  
Junior   5 
Senior   1 

J'ai juste besoin de modifier l'ordre si elle ressemble à ce

Junior   5 
Intermediate 10   
Senior   1 

Je n'arrive pas à déterminer quelle commande par clause utiliser pour réaliser l'ordre par des valeurs spécifiques personnalisées, comment pourrais-je y parvenir?

Répondre

1

Vous devez ajouter une troisième colonne, appelée par exemple ordre de tri. Ensuite, attribuez la valeur entière lui est propre,

select 'junior' as type, value, 1 as sortorder 
from mytable 
union 
select 'intermediate' as type, value, 2 as sortorder 
from mytable 
union 
select 'senior' as type, value, 3 as sortorder 
from mytable 
order by 3 
+0

réponse la plus simple, merci à tous Rowno de #mytable union type select, valeur, rOW_NUMBER() sur (commande par type) comme Rowno de #mytable ) – Jamesla

2

Je ne sais pas si je vous ai bien compris, mais je voudrais extraire une colonne supplémentaire, par ex. "séquence" avec des valeurs entières. Il fournira à la capacité d'appliquer l'ordre personnalisé.

À titre d'exemple:

select results.type, results.value, results.sequence 
from ( 
    select 'junior' as type, value, 0 as sequence 
    from mytable 
    union 
    select 'intermediate' as type, value, 1 as sequence 
    from mytable 
    union 
    select 'senior' as type, value, 2 as sequence 
    from mytable 
) as results order by results.sequence 
2

Vous pouvez trier par l'ajout d'une colonne clé de tri ou d'ajouter une simple déclaration de cas basée sur les valeurs.

-- Sort with Case statement 
with sourceData as 
(
    select 'junior' type, 5 value 
    union all 
    select 'intermediate' type, 10 value 
    union all 
    select 'senior' type, 1 value 
) 
select * 
from sourceData 
order by 
    case type 
    when 'junior' then 0 
    when 'intermediate' then 1 
    when 'senior' then 2 
    else null 
    end 

SQL Fiddle pour le test.

0

Essayez celui-ci.

Sélectionner le type, la valeur de ( select type, valeur, row_number() sur (commande par type) comme Rowno de #mytable union type select, valeur, row_number() sur (ordre par type) comme un ordre de 2 desc

Questions connexes