我有以下查询:
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子句来实现自定义特定值的排序,我将如何实现这一目标?
答案 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的订单