按照特定值对SQL列进行排序,然后按字母顺序对相同列的其余部分进行排序。

5

我有一个简单的 select * from myTable 查询,并且有一列名为Fruits

Fruits 列有以下数据:

Apple
Pear
Peach
Plum
Grape

我总是希望先获取葡萄,然后按顺序获取其他的,这样就可以得到以下结果:

Grape
Apple
Peach
Pear
Plum

一如既往地感谢您的帮助!

3个回答

7
我会尝试做类似这样的事情:
DECLARE @myTable TABLE([Fruits] VARCHAR(20))
INSERT INTO @myTable VALUES('Apple')
INSERT INTO @myTable VALUES('Pear')
INSERT INTO @myTable VALUES('Peach')
INSERT INTO @myTable VALUES('Plum')
INSERT INTO @myTable VALUES('Grape')

SELECT * 
FROM @myTable
ORDER BY
    CASE WHEN([Fruits] = 'Grape') THEN 0 ELSE 1 END,
    [Fruits]

ORDER BY中,当[Fruits]字段为Grape时,您正在分配一个值,以便首先对其进行排序,然后在[Fruits]字段上执行二次排序。

这种解决方案的优点是不需要模式更改,但由于需要更多的排序工作,因此性能受到较大影响。 - cdeszaq
@cdeszaq 你说得对。如果我需要频繁运行此查询并且知道该表有可能拥有大量记录,我可能会更改模式。在行数较少的表上,性能影响可能可以忽略不计。 - rsbarro

4
select * from myTable
order by
     case when Fruits = 'Grape' then 0 else 1 end,
     Fruits

2

在您的水果表中添加一个序号列,并将葡萄的序号设置为最低值(1),其余水果设置为不同的值(例如2)。

然后,您可以按照序号和水果名称排序。这将使葡萄排在顶部,其余水果按字母顺序排列在下方。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接