Jus*_*808 26 sql t-sql sql-server sql-server-2000 sql-order-by
是否可以为返回的结果定义排序顺序?
我希望排序顺序为"橙色","苹果","草莓",不是升序或降序.
我知道ORDER BY可以做ASC或DESC但是有一个DEFINED('orange','apple','strawberry')类型的东西?
这将在SQL Server 2000上运行.
Lit*_*les 54
它非常笨重,但您可以使用CASE语句进行排序:
SELECT * FROM Blah
ORDER BY CASE MyColumn
WHEN 'orange' THEN 1
WHEN 'apple' THEN 2
WHEN 'strawberry' THEN 3
END
Run Code Online (Sandbox Code Playgroud)
或者,您可以创建包含排序字段和排序顺序的辅助表.
TargetValue SortOrder
orange 1
apple 2
strawberry 3
Run Code Online (Sandbox Code Playgroud)
并将您的表格加入这个新表格.
OMG*_*ies 12
使用CASE声明:
ORDER BY CASE your_col
WHEN 'orange' THEN 1
WHEN 'apple' THEN 2
WHEN 'strawberry' THEN 3
END
Run Code Online (Sandbox Code Playgroud)
使用ELSE的备用语法:
ORDER BY CASE
WHEN your_col = 'orange' THEN 1
WHEN your_col = 'apple' THEN 2
WHEN your_col = 'strawberry' THEN 3
ELSE 4
END
Run Code Online (Sandbox Code Playgroud)
如果这将是一个短期要求,请使用案例陈述.但是,如果你认为它可能存在一段时间,并且它总是orange/apple/strawberry有序(或者即使不是 - 见下文),你可能想要牺牲一些磁盘空间来获得一些速度.
在表中创建一个新列,or_ap_st并使用插入/更新触发器用数字1,2或3填充它,具体取决于水果列的值.然后索引它.
由于该列中的数据唯一更改的时间是行更改时,这是执行此操作的最佳时间.然后,成本将在少量写入而不是大量读取上产生,因此在select语句上摊销.
您的查询将是一个惊人的快速:
select field1, field2 from table1
order by or_ap_st;
Run Code Online (Sandbox Code Playgroud)
没有每行功能杀死性能.
并且,如果您还想要其他排序顺序,那就是我调用该列的原因or_ap_st.您可以根据需要添加任意数量的其他排序列.