2013-09-29 57 views
0

我有以下查询:SQL命令通过硬编码值

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

它返回以下数据:

type   value 

Intermediate  10  
Junior   5 
Senior   1 

我只是需要,所以它看起来像这样

Junior   5 
Intermediate 10   
Senior   1 
来重新排序

我不知道哪个订单的子句用于实现通过自定义特定值排序,我将如何实现这一目标?

回答

1

您需要添加的第三列中,例如所谓的排序。然后,适当的整数值分配给它,

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

最简单的答案,谢谢大家 – Jamesla

2

我不知道你是否理解你,但我会提取一列,例如带有整数值的“序列”。它将提供应用自定义订单的能力。

作为一个例子:

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

您可以排序增加排序键列或添加一个基于值的简单的case语句。

-- 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进行测试。

0

试试这个。

选择类型,值从 ( 选择类型,值,ROW_NUMBER()以上(按类型顺序)rowno 从#mytable 联合 选择类型,值,ROW_NUMBER()以上(按类型顺序) rowno 从#mytable 工会 选择类型,值,ROW_NUMBER()以上(按类型顺序)rowno 从#mytable )的订单,由2递减