liuchaono1
liuchaono1
2010-02-25 10:26
浏览 282
已采纳

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;

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • iteye_13500
    iteye_13500 2010-02-27 10:31
    已采纳

    [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。

    点赞 评论
  • iteye_13500
    iteye_13500 2010-02-25 11:48

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

    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]

    点赞 评论

相关推荐