现在有这个问题
查询一个表的所有数据,如果不足十行,不足的用空数据补上。
比如,查出9条数据,就要显示出这九行,外加一行补的。补的这行所有字段都为空就行
实现以上需求,一条sql语句能实现吗

解决方案 »

  1.   

    这个需求怪啊,呵呵。
    一条sql语句太难了。
      

  2.   

    select * from test 1 PDA03116 注册兽医师 2
    2 PDA03116 注册兽医师 3
    3 PDA03116 无定级兽医 1
    4 PDA03116 中级技工    2
    5 PDA03116 初级技工          1
    6 PDA03117 无定级技工 2
    7 PDA03117 无定级技工 7SQL:
    select to_char(t01),to_char(t02),to_char(t03) from test
    union all
    select to_char('') t01,to_char('') t02, to_char('') t03 from test where rownum<9-rownum1 PDA03116 注册兽医师 2
    2 PDA03116 注册兽医师 3
    3 PDA03116 无定级兽医 1
    4 PDA03116 中级技工 2
    5 PDA03116 初级技工 1
    6 PDA03117 无定级技工 2
    7 PDA03117 无定级技工 7
    8
    9
    10
    11 8-11 都是为空的值!不知满足你要求没?
      

  3.   

    2楼的  “from test where rownum<9-rownum” 如果 test 的数据行大于等于4的话,固定是4行,如果小于4的话,固定是test的数据行数。
      

  4.   

    建议lz用动态sql,实现起来应该不是特别麻烦。
      

  5.   

    假设表有三个字段:
    select * from (select * from 表
    union (select null,null,null from dual)
    union (select null,null,null from dual)
    union (select null,null,null from dual)
    union (select null,null,null from dual)
    union (select null,null,null from dual)
    union (select null,null,null from dual)
    union (select null,null,null from dual)
    union (select null,null,null from dual)
    union (select null,null,null from dual)
    union (select null,null,null from dual))
    where rownum<10
      

  6.   

    select * from (select * from 表 
    union (select null,null,null from dual) 
    union (select null,null,null from dual) 
    union (select null,null,null from dual) 
    union (select null,null,null from dual) 
    union (select null,null,null from dual) 
    union (select null,null,null from dual) 
    union (select null,null,null from dual) 
    union (select null,null,null from dual) 
    union (select null,null,null from dual) 
    union (select null,null,null from dual)) 
    where rownum <=10
      

  7.   

    也只好这样了
    以前用过postgred,那里用limit 10 offset 0就可以
      

  8.   

    SELECT *
    FROM (
    SELECT ROWNUM r,a.*
    FROM messages a
    )a
    RIGHT OUTER JOIN (
    SELECT LEVEL l
    FROM DUAL
    CONNECT BY LEVEL <=10
    )b ON b.l=a.r
      

  9.   


    例子如下:
    SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO
      FROM (SELECT T.*, ROWNUM RN FROM SCOTT.EMP T) X,
           (SELECT LEVEL L FROM DUAL CONNECT BY LEVEL <= 10) Y
     WHERE X.RN(+) = Y.L;SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO
      FROM (SELECT T.*, ROWNUM RN FROM SCOTT.EMP T WHERE ROWNUM < 8) X,
           (SELECT LEVEL L FROM DUAL CONNECT BY LEVEL <= 10) Y
     WHERE X.RN(+) = Y.L;
      

  10.   

    10楼,11楼强。
    学习!SELECT *
      FROM (SELECT T.*, ROWNUM RN FROM Test T) X,
           (SELECT LEVEL L FROM DUAL CONNECT BY LEVEL <= 10) Y
     WHERE X.RN(+) = Y.L;