回 帖 发 新 帖 刷新版面

主题:帮解决一下....

如由成绩表中检出各学生的成绩,一般是第一列学生名,第二列是学科名,第三列是成绩,如果能做到第一列为学生名,第二\三\四列为各学科名称,成绩相应填入,则表格美观得多,我试了很多方法,做不到

回复列表 (共3个回复)

沙发

可以这实现:

假设
1.你从表中检索出数据 --- Select name, item, score from ...
2.你的科目item总共有4门科目(多则以此类推...), 其内容分别为 'a', 'b', 'c', 'd'

然后你在PB中新建一个DataWindow:
1.先定义数据源(列名参照上面的SQL中的列名)
2.回到DataWindow的界面设计窗口:
a.在明细栏(Detail Band)放上对象(菜单Object->Column) name
b.在明细栏依次放上以下4个计算列对象(菜单Object->Computed Field):
  score_a,score_b,score_c,score_d
  其定义(Expression)依次为:
     if(item='a',score,0)
     if(item='b',score,0)
     if(item='c',score,0)
     if(item='d',score,0)
c.Header栏添加列标题(如姓名,语文,数学,...)
d.按name列创建分组
e.Mouse 按住 Trailer group 后往下拉出一定空间
f.选中score_a,score_b,score_c,score_d这4列后点击菜单Object->sum
g.点击菜单Object->Computed Field 在name列下方分组尾部栏中添加计算列,其expression为name
h.将明

板凳

实际上如果你后台数据库(如SQL Server)支持的话,你可以直接在从表中检索数据时就得到你想的格式,而省去了在DataWindow 中进一步的任何处理:

select name,
   sum(case(item when 'a' then score else 0)) as score_a,
   sum(case(item when 'b' then score else 0)) as score_b,
   sum(case(item when 'c' then score else 0)) as score_c,
   sum(case(item when 'd' then score else 0)) as score_d
from ...
where ...
group by name
...

3 楼

很好..

我来回复

您尚未登录,请登录后再回复。点此登录或注册