如果我想按升序显示名称列表,除了一些默认值,我怎么能用SQL order by子句实现这个。
例如结果:
place
-------
United States
United Kingdom
Bahrain
Australia
Fiji
Indonesia
Japan
Korea
....
如果美国,英国和巴林是某些默认值,我们希望在数据库的常规升序列表之前出现 - 所有这些(包括默认值都是从数据库中提取而不是硬编码)。默认值应按照上面定义的顺序(不是asc或desc)
由于
答案 0 :(得分:2)
试试这个。我在查询中使用ORDER BY
语句使用条件CASE
:
SELECT
place
FROM #yourtable
ORDER BY
(CASE WHEN place='United States' THEN '1'
WHEN place='United Kingdom' THEN '2'
WHEN place='Bahrain' THEN '3'
ELSE place
END)
答案 1 :(得分:2)
我认为正确的方法是在表default_seq int
中添加一列。对于非默认列,将其设置为0
,对于默认列,将其设置为正值,最高编号为首先出现的值。
然后查询变为:
select place
from your_table
order by default_seq desc, place asc
这样做的好处是可以在不更改任何代码的情况下更改默认值。
答案 2 :(得分:0)
要创建所需的结果,您可以使用UNION
,如下所示。 UNION
运算符组合了两个或多个select语句的结果:
SELECT * FROM (
SELECT * FROM <table>
WHERE place IN ( 'United States', 'United Kingdom', 'Bahrain' )
ORDER BY place DESC
) A
UNION
SELECT * FROM (
SELECT * FROM <table>
WHERE place NOT IN ( 'United States', 'United Kingdom', 'Bahrain' )
ORDER BY place ASC
) B;