deptno, deptname, name, 
1        部门一     张三
1        部门一     李四
1        部门一     王五
2        部门二     赵六
2        部门二     刘七上面的数据如何通过一条sql显示成下面的格式deptno, deptname, name, 
1        部门一     张三
                   李四
                     王五
2        部门二     赵六
                     刘七

解决方案 »

  1.   

    这个办法是有,不过我觉得这样显示有什么意义?
    你可以用lag来取上一条来做判断
    我写语句,先去测试好贴出来
      

  2.   

    /* Formatted on 2008/05/21 13:44 (Formatter Plus v4.8.8) */
    WITH a AS
         (SELECT 1 deptno, '部门一' deptname, '张三' NAME
            FROM DUAL
          UNION ALL
          SELECT 1, '部门一', '李四'
            FROM DUAL
          UNION ALL
          SELECT 1, '部门一', '王五'
            FROM DUAL
          UNION ALL
          SELECT 2, '部门二', '赵六'
            FROM DUAL
          UNION ALL
          SELECT 2, '部门二', '刘七'
            FROM DUAL)
    SELECT DECODE (ROW_NUMBER () OVER (PARTITION BY deptno ORDER BY deptname,
                    NAME),
                   1, deptno,
                   NULL
                  ) deptno,
           DECODE
              (ROW_NUMBER () OVER (PARTITION BY deptno, deptname ORDER BY NAME),
               1, deptname,
               NULL
              ) deptname,
           NAME
      FROM a结果
    Row# DEPTNO DEPTNAME NAME1        1         部门一            李四
    2                           王五
    3                           张三
    4          2         部门二            刘七
    5                           赵六
      

  3.   

    其实最好应该是这样的SELECT DECODE (rn1, 1, deptno, NULL) deptno,
           DECODE (rn2, 1, deptname, NULL) deptname, NAME
      FROM (SELECT   a.*,
                     ROW_NUMBER () OVER (PARTITION BY deptno ORDER BY deptname,
                      NAME) rn1,
                     ROW_NUMBER () OVER (PARTITION BY deptno, deptname ORDER BY NAME)
                                                                              rn2
                FROM a
            ORDER BY a.deptno, deptname, NAME)
    这样能保证输出结果按正确的顺序显示
    否则万一你的数据不是顺序插入的,显示出来会混乱的