如下建立表
create table tb
(
blogid number,
blogclass varchar2(30)
)
insert into tb values(1,'人生');
insert into tb values(2,'学习');
insert into tb values(3,'工作');
insert into tb values(4,'感情');
insert into tb values(5,'朋友');
insert into tb values(6,'娱乐');
我想以blogid为参数传入,比如传入 blogid=3 吧
就是把 满足条件的结果提前,其他的按找升序排列!
不知道我说明白了没有返回结果为
3 工作
1 人生
2 学习
4 感情
5 朋友
6 娱乐
我想用oracle数据库实现这个结果!请高手指点一下!迷茫的小孩子!
多谢高人指点!!

解决方案 »

  1.   

    select * from t order by decode(blogid,3,1,2), blogid;
      

  2.   

    select * from tb
    order by decode(blogid,:blogid,1,2),blogid:blogid表示你的传入参数
      

  3.   

    借用楼上的:
    select * from tb 
    order by decode(blogid,:blogid,0,blogid),blogid :blogid表示你的传入参数
      

  4.   

    order by还可以这样用啊 长见识了
    能不能讲讲具体的执行过程是怎样的我刚试了下 结果是对的
    SQL> select * from tb;    BLOGID BLOGCLASS
    ---------- ------------------------------
             1 人生
             2 学习
             3 工作
             5 朋友SQL> select * from tb order by decode(blogid,3,1,2), blogid;    BLOGID BLOGCLASS
    ---------- ------------------------------
             3 工作
             1 人生
             2 学习
             5 朋友
      

  5.   

    默认升序排序,blogid = 3时返回1,其他则返回2, 所以blogid = 3的记录排在最前啊。
      

  6.   


    select *
      from tb
    order by case when id = 你传入的值 then -9999999999 else id end;[-9999999999]只是一个足够小的值,根据你定义的列的大小写一个就可以了。
    如 是number(2)或者char(2)或者varchar(2) 就写 -99。
      

  7.   

    感谢wildwave,在你的启发下,我得到了自己想要的答案,多谢哦!!
      

  8.   

    汗其实我的答案和shiyiwan是一样的,慢了一分钟,哈哈