读书人

只剩下一点点分了,一个对小弟我来说比

发布时间: 2012-01-19 00:22:28 作者: rapoo

只剩下一点点分了,一个对我来说比较棘手的问题(Gridview追加列的问题)
功能如下:

有如下一个表(TABLE1):

归属日期 班级 学生 工作类别 所用时间
9.1 一 A 擦桌子 8
9.1 一 B 拖地 7
9.2 一 C 拖地 6
9.1 一 D 擦桌子 5

9.1 二 E 拖地 4
9.3 二 F 拖地 5
9.1 二 G 拖地 6

9.4 三 H 擦桌子 10
9.1 三 I 擦窗户 9
9.2 三 J 擦窗户 8
9.2 三 K 拖地 7
9.1 三 L 擦桌子 6
9.2 三 M 擦桌子 5
9.1 三 N 拖地 4

相关字段如下: 归属日期 Date
班 级 Class
学 生 Student
工作类别 Sort(Sort=1 擦桌子;Sort=2 擦窗户;Sort=3 拖地)


所用时间 Time

查询条件为归属日期从9.1到9.4,我想得到如下结果:
班级 擦桌子 擦窗户 拖地 合计
一 13 0 13 26
二 0 0 14 14
三 21 17 11 49

我的想法如下:
(1) 先按归属日期将符合条件的班级(不重复)用Gridview显示出来
SELECT distinct Class from TABLE1 执行后得到如下结果:



(2) 然后就是追加列的问题了.例如:(以班级一为例)
//统计班级一的擦桌子所用时间总和
Select sum(Time) from TABLE1 WHERE Sort=1 and Class= "一 "
//统计班级一的擦窗户所用时间总和
Select sum(Time) from TABLE1 WHERE Sort=2 and Class= "一 "
//统计班级一的擦窗户所用时间总和
Select sum(Time) from TABLE1 WHERE Sort=3 and Class= "一 "
如果能查询到数据,将数据添加到相应的单元格,如果查询不到,就将0添加到相应的单元格(也就是说班级一没有同学擦窗户,那在最后的结果中为0)
不知道我的想法是否合理,能否实现,
如果能的话, 那具体应该怎么追加Gridview中的列.
如果我的想法不能实现,那不知道还有没有更好的方法或者思想.分虽然很少,但还是急切的希望各位大虾能帮帮我,谢谢各位了!!!




[解决办法]
在OnInit()事件里
加TemplateField
[解决办法]
看到“擦桌子 擦窗户 拖地”觉得很眼熟阿,呵呵
我觉得合适的做法还是写出sql然后绑定。
非要这么做的话,现取出“一 ”,itembound的时候作为条件在写sql访问数据库取 "擦桌子 擦窗户 拖地 ",
数据库算是累坏了。

sql直接写不出来吗?那帖子不是给答案了吗?

[解决办法]
declare @T table(归属日期 varchar(20),班级 varchar(20), 学生 varchar(20),工作类别 varchar(20), 所用时间 int)

insert @T select '9.1 ', '一 ' , 'A ', '擦桌子 ',8

union all select '9.1 ', '一 ' , 'B ', '拖地 ',7

union all select '9.1 ', '一 ' , 'C ', '拖地 ',6

union all select '9.1 ', '一 ' , 'D ', '擦桌子 ',5

union all select '9.1 ', '二 ' , 'E ', '拖地 ',4

union all select '9.1 ', '二 ' , 'F ', '拖地 ',5

union all select '9.1 ', '二 ' , 'G ', '拖地 ',6

union all select '9.1 ', '三 ' , 'H ', '擦桌子 ',10

union all select '9.1 ', '三 ' , 'I ', '擦窗户 ',9

union all select '9.1 ', '三 ' , 'J ', '擦窗户 ',8

union all select '9.1 ', '三 ' , 'K ', '拖地 ',7

union all select '9.1 ', '三 ' , 'L ', '擦桌子 ',6

union all select '9.1 ', '三 ' , 'M ', '擦桌子 ',5

union all select '9.1 ', '三 ' , 'N ', '拖地 ',4



select * from @t

select 班级,
擦桌子=sum(case when 工作类别= '擦桌子 ' then 所用时间 else 0 end) ,
擦窗户=sum(case when 工作类别= '擦窗户 ' then 所用时间 else 0 end) ,
拖地 =sum(case when 工作类别= '拖地 ' then 所用时间 else 0 end),
合计 =sum(所用时间)
from @T group by 班级 order by charindex(班级, '一,二,三 ')

测试结果

一 1301326
二 001515
三 21171149
[解决办法]
是内容可能有很多项吗?
关于纵向数据转横向,有很多例子的,LZ可以搜一下

读书人网 >asp.net

热点推荐