top1 只有在ACCESS 和SQL 中才有,你用order by desc取第一条吧

解决方案 »

  1.   

    top 1是只有ASP才有。我现在改了..
    SELECT dept_ID,dept_Name,ParentID,(select count(*) from share_dept c where c.parentid=a.dept_id) as Child,(select dept_ID from share_dept b where rownum<2 and b.ParentID=a.dept_ID ORDER BY parentID desc,to_char(dept_id) desc) AS EndCata FROM share_dept a order by to_char(dept_id) asc把top1 去掉。加上ROWNUM<2就可以了但是不知道为什么.那个()内的select 语句不能order by 
    在ORACLE中执行他显示ORDER BY那边出错
    我把ORDER BY 全部去掉后好象排序和以前的不一样。程序会出错而且会出现类型不匹配
      

  2.   

    估计你的ORACLE版本是8及以下吧,好像是不支持在子查询中用ORDER BY.
    如果是9i及以上应该就可以过的.
      

  3.   

    至少有2个地方有错:
    1.子查询作为字段值的时候不能直接使用order by,不管哪个版本都一样,8i以后可以多嵌套一层来避免错误
    2.要先在子查询中排序再在外层查询中取rownum=1的纪录,否则仍然取得排序前的rownum =1的纪录另外按你的意思,不要用rownum,用max就可以了啊SELECT dept_ID,
           dept_Name,
           ParentID,
           (SELECT COUNT(*) FROM share_dept c WHERE c.parentid = a.dept_id) AS Child,
           (SELECT max(b.dept_ID) FROM share_dept b AND b.ParentID = a.dept_ID) AS EndCata
    FROM   share_dept a
    ORDER  BY to_char(dept_id) ASC
      

  4.   

    搜索出来的信息为
    DEPT_ID DEPT_NAME,PARENT_ID,CHILD,ENDCATA
    1       泉州移动    0       1     11
    11      网络部      1       2     111
    111     工程中心    11      0    
    112     IT中心      11      0   是大概这样的结构
    而ENDCATA是显示最后一个啊.应该是112才对..是用MAX()吗?
    我试试喔..