有两张表,第一张是存新闻的表 sitenews结构如下:
SQL> desc sitenews;
Name          Type           Nullable Default                            Comments                         
------------- -------------- -------- ---------------------------------- -------------------------------- 
N_ID          NUMBER(10)                                                 新闻唯一10位数字编号,对应主键pk_news_id 
N_DEL         NUMBER(1)      Y        0                                  是否已经删除,1表示已经删除       
N_UP          NUMBER(3)      Y        255                                在栏目中的次序,0-->999,从小到大  
N_HIT         NUMBER(10)     Y        0                                  本条新闻点击次数                 
N_IP          VARCHAR2(15)   Y                                           发布本条新闻的IP地址             
N_STARTDATE   DATE           Y        sysdate                            开始发布的时间,管理员可以自定义  
N_ENDDATE     DATE           Y        to_date('2099-12-31','yyyy-mm-dd') 结束发布的时间,管理员可以自定义,默认值为:2099年1月31日 
N_REALDATE    DATE           Y        sysdate                            真实发布时间,不能修改的          
N_DISPLAYDATE DATE           Y        sysdate                            发布时间,管理员可以自定义        
N_BLOCK       NUMBER(5)      Y                                           所在栏目,外键                    
N_PARENTID    NUMBER(10)     Y                                           所在父标题,外键                  
N_TITLE       VARCHAR2(2000) Y                                           标题                          




。第二张是栏目表,存新闻栏目,结构如下:
SQL> desc siteblocks;
Name                Type           Nullable Default         Comments           
------------------- -------------- -------- --------------- ------------------ 
B_ID                NUMBER(5)                               唯一编号           
B_PARENTID          NUMBER(5)      Y                        父栏目编号         
B_UP                NUMBER(3)      Y        255             栏目排序,从小到大0-999 
B_SORT              VARCHAR2(4)    Y        'asc'           asc-->正序,desc-->倒序 
B_HIDE              NUMBER(1)      Y        0               1-->隐藏,  0-->显示 
B_NAME              VARCHAR2(200)  Y                        栏目名称           
B_INTRO             VARCHAR2(2000) Y                        栏目简介           
B_LISTTYPE          NUMBER(1)      Y        1               1-->列表,0-->分页显示 
B_DATE              DATE           Y        sysdate         栏目建立时间  这个栏目有一个字段(b_sort)表示当前栏目中新闻是正序还是倒序排列,
现在我要选择某个栏目的所有新闻,用栏目的指定顺序排列,如何写?
select * from sitenews where n_block=14 order by  .................. (n_id,编号14栏目的b_sort的值 asc/desc, 如 order by n_id desc)怎么与??
求救了!

解决方案 »

  1.   

    第一张是存新闻的表 sitenews N_BLOCK  所在栏目,外键    
     应该对应      
    第二张是栏目表   siteblocks B_ID      唯一编号       
    那么就很好写了。
    SELECT * FROM  sitenews  A
    LEFT JOIN
     siteblocks B
    ON A.N_BLOCK = B.B_ID
    WHERE (条件)
    ORDER BY B.B_UP
      

  2.   


    --修改下
    SQL> select * from sitenews;      N_ID    N_BLOCK N_DEL
    ---------- ---------- ----------
             1         14 AAA
             2         14 DDD
             3         14 SSS
             4         15 WWW
             6         14 EEE
             5         12 RRR
             7         14 TTT已选择7行。SQL> select * from siteblocks;      B_ID B_SORT
    ---------- ----------
             1 asc
             2 desc
    SQL> 1  create or replace procedure myproc(b_sort in varchar2,rs out sys_refcursor) 2  as
     3  begin
     4         if Upper(b_sort)='ASC' then
     5          open rs for select * from sitenews where n_block=14 order by n_id a
    c;
     6          else
     7           open rs for select * from sitenews where n_block=14 order by n_id
    esc;
     8           end if;
     9* end;
    QL> /过程已创建。
    QL> var aa refcursor
    QL> var temp varchar2
    QL> select b_sort into :temp from siteblocks where b_id=1;_SORT
    ---------
    scQL> begin
     2  myproc(:temp,:aa);
     3  end;
     4  /L/SQL 过程已成功完成。QL> print :aa     N_ID    N_BLOCK N_DEL
    --------- ---------- ----------
            7         14 TTT
            6         14 EEE
            3         14 SSS
            2         14 DDD
            1         14 AAAQL>
      

  3.   

    如下:),其实本来就两个值,直接作为条件就可以了:
    select * from sitenews where n_block=14 and B_SORT= 'desc'  order by n_id desc
      

  4.   


    你好!谢谢回复.第一张是存新闻的表 sitenews N_BLOCK  所在栏目,外键    
    应该对应      
    第二张是栏目表  siteblocks B_ID      唯一编号是这样的.
    但是您没有理解我的意思,我是根据b.b_up的值是asc/desc 去用n_id 排序,
    如果表siteblock 中 b_id=14记录 的b_sort 值为asc 则为 select * from sitenews where n_block=14 order by n_id asc
    如果表siteblock 中 b_id=14记录 的b_sort 值为desc 则为 select * from sitenews where n_block=14 order by n_id desc
      

  5.   


    begin
     execute immediate 'select * from sitenews where n_block=14 order by n_id &aa';
    end;
      

  6.   

    select a.* from sitenews a left join siteblocks b on a.N_BLOCK=b.B_ID where a.N_BLOCK=14 
    order by decode(b_sort,'asc',1,'desc',a.N_ID,1) desc;
    使用decode函数即可,当是正序的时候,order by 1 desc,是倒序的时候 order by N_ID desc;