sql server中这样的sql语句什么意思?

数据库:sql server 2005
表名:test_liu
表结构:test_liu(id(int),name(varchar),category(varchar))
表中的数据:见附件图片
有没有知道,下面这条sql是什么意思?结果到底是按照什么排序的?
select * from test_liu order by case test_liu.category when 'fruit' then 'vegetable' else 'fruit' end;

哪位能给指点指点,先谢过了!

[quote]可令人难以理解的是,为什么category为‘both’的tomato会排在‘vegetable’和‘fruit’中间呢?另外,对于category同是'fruit'的记录,又是按照什么排序的,按照id吗?[/quote]

1 为什么category为‘both’的tomato会排在‘vegetable’和‘fruit’中间呢?
按照表达式,category为‘both’和‘vegetable’时值是相同的,此时该类显示是按照记录出现的顺序出现的。所以id出现的顺序是3,4,6.

2 对于category同是'fruit'的记录,又是按照什么排序的,按照id吗?
和上面一样,按记录出现的顺序,在你提供的表里,就是按照id。

这道是考试题? 感觉有故意把人搞晕的味道

order by case 语句可以对某一字段分类进行排序,比如,在这里例子里,对于category字段安装类别的不同分别进行排序。

但是你提供的语句有点复杂,容易把人搞晕,可以写成:

[code="java"]SELECT *
FROM test_liu
ORDER BY CASE category
WHEN 'fruit'
THEN 2
ELSE 1
END[/code]

效果是一样的,原因是vegetable的首字母v比fruite的f大,他们之间只需要比较大小就行了。

所以,这个语句的意思就是,根据category字段的不同值分别排序,值小的排在前面(某人升序),如果想降序,可以写成

[code="java"]SELECT *
FROM test_liu
ORDER BY CASE category
WHEN 'fruit'
THEN 2
ELSE 1
END desc[/code]