-- 看看下面的,不知道对不对。
select a.姓名,a.培训班名称,b.期数,a.学习天数 from 
(
select case grouping(姓名) when 0
then 姓名 else  '(总计)' end as 姓名,
case grouping(培训班名称) when 0
then 培训班名称 else '合计' end as 培训班名称,
sum(学习天数) as  学习天数
from vwjypx
group by 姓名,培训班名称 with rollup
) a 
left join 
vwjypx b 
on a.姓名=b.姓名 and a.培训班名称=b.培训班名称
order by a.姓名,a.学习天数

解决方案 »

  1.   

    大哥,你真牛!
    非常感谢!
    能告诉我你的msn吗,想经常向你学习!
      

  2.   

    还不是很清楚你的意思,来,上msn。
    我已经pm给你。
      

  3.   

    比如说:
    姓名       培训班名称     期数     学习天数
    艾红生    交换原理及维护 1 91
    艾红生    交换原理及维护 2 32
    艾红生    市场营销培训班 3 1得到的统计结果是:
    姓名       培训班名称     期数     学习天数
    艾红生    交换原理及维护 1 91
    艾红生    交换原理及维护 2 32
    艾红生    市场营销培训班 3 1姓名       培训班名称     期数     学习天数
    艾红生    市场营销培训班 3 1
    艾红生    交换原理及维护 1 123
    艾红生    交换原理及维护 2 123
    艾红生    合计         NULL 124
      

  4.   

    不好意思,写错了:
    比如说,原始数据是:
    姓名       培训班名称     期数     学习天数
    艾红生    交换原理及维护 1 91
    艾红生    交换原理及维护 2 32
    艾红生    市场营销培训班 3 1得到的统计结果是:姓名       培训班名称     期数     学习天数
    艾红生    市场营销培训班 3 1
    艾红生    交换原理及维护 1 123
    艾红生    交换原理及维护 2 123
    艾红生    合计         NULL 124这里面第一期和第二期的学习天数都成了123天。
      

  5.   

    我的msn:  [email protected]
    今天我得下网了,明天见。
    谢谢!
      

  6.   

    select * from 
    (
    select case grouping(姓名) when 0
    then 姓名 else  '(总计)' end as 姓名,
    case grouping(培训班名称) when 0
    then 培训班名称 else '合计' end as 培训班名称,
    case grouping(期数) when 0
    then 期数 else 期数 end as 期数,
    sum(学习天数) as  学习天数
    from vwjypx
    group by 姓名,培训班名称,期数 with rollup) a where not (a.期数 is null and a.培训班名称<>'合计')
      

  7.   

    -- test如下:
    create table t
    (
    姓名 varchar(10),
    培训班名称 varchar(50),
    期数 int,
    学习天数 int
    )
    insert t
    select '艾红生','交换原理及维护',1,91
    union select '艾红生','交换原理及维护',2,32
    union select '艾红生','市场营销培训班',3,1
    union select '李四','计算机网络安全培训',1,3
    union select '李四','办公自动化培训',3,12
    union select '李四','经营管理讲座 ',1,4
    union select '王五','管理创新讲座',1,5
    union select '王五','战略举措讲座',2,2
    union select '王五','会计班',1,12
    union select '王五','工业会计辅导班',2,3
    gocreate view vwJypx
    as
    select * from t
    goselect * from vwJypxselect * from 
    (
    select case grouping(姓名) when 0
    then 姓名 else  '(总计)' end as 姓名,
    case grouping(培训班名称) when 0
    then 培训班名称 else '合计' end as 培训班名称,
    case grouping(期数) when 0
    then 期数 else 期数 end as 期数,
    sum(学习天数) as  学习天数
    from vwjypx
    group by 姓名,培训班名称,期数 with rollup) a where not (a.期数 is null and a.培训班名称<>'合计')drop table t
    drop view vwJypx
      

  8.   

    问题得到完满的解决。
    非常感谢!
    也非常希望能成为你的朋友,可以经常向你请教,
    不知是否能满足我的要求。
    我的msn:   [email protected]还有:我对grouping 和rollup的用法不太明白,
    能帮忙解释一下吗?
    再三麻烦,不好意思。