有数据表Table,有字段 Debt(部门)、Duty(职务,值为高工、工程师、助工之一),表中有如下数据:
     Debt(部门)  Duty(职务)
     设计室1      高工
     设计室2      助工
     设计室2      高工
     设计室1      工程师 用下列语句:
select Debt,count(*),count(decode(Duty,'高工',1,null)),
count(decode(Duty,'工程师',1,null)),
count(decode(Duty,'助工',1,null))    from table
group by debt
已经正确得到结果集:
      部门       合计   高工    工程师    助工
     设计室1      2      1        1        0 
     设计室2      2      1        0        1  现在希望修改select语句,在结果集最前面增加一条合计记录,即结果集是:
       部门       合计   高工    工程师    助工
     合计         4      2        1        1
     设计室1      2      1        1        0 
     设计室2      2      1        0        1   SQL语句是怎样的? 

解决方案 »

  1.   

    求合计把group by debt改成group by rollup(debt)会在后面列出合计.
      

  2.   

    SELECT NVL(DEBT, '合计') AS DEBT, COUNT(DUTY) AS DUTY, 
    FROM TABLE
    GROUP BY ROLLUP(DEBT)
    ORDER BY DUTY DESC
    /
      

  3.   

    用rollup函数,可以加总。
    如果对排序有要求,楼上的可能要修改一下,因为DEBT的名字不一定能让'合计'排在前面
    SELECT NVL(DEBT, '合计') AS DEBT, COUNT(DUTY) AS DUTY, 
    FROM TABLE
    GROUP BY ROLLUP(DEBT)
    ORDER BY NVL(DEBT, '0000')  DESC
    这样的话合计应该能在最后了