sql顺序由硬编码值

时间:2013-09-29 20:16:23

标签: sql sql-server sql-server-2008

我有以下查询:

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

我无法弄清楚使用哪个order by子句来实现自定义特定值的排序,我将如何实现这一目标?

4 个答案:

答案 0 :(得分: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

答案 1 :(得分: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进行测试。

答案 2 :(得分: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

答案 3 :(得分:0)

试试这个。

选择TYPE,值来自 ( 选择type,value,row_number()over(按类型排序)为rowno 来自#mytable 联盟 选择type,value,row_number()over(按类型排序)为rowno 来自#mytable 联盟 选择type,value,row_number()over(按类型排序)为rowno 来自#mytable )2 desc的订单