我的数据库是sql2000,语言是delphi.存在一个数据表:table1,字段有id,车牌,司机,运输货物量。
id为主键,
车牌,司机 为string类型,运输货物量为int型数据,有六条记录 意思是两个司机用2个车送货,A1载1吨,A2载2吨.统计每个司机的送货量
id 司机 车牌 配送货物量
1 sj1 A1 1
2 sj1 A1 1
3 sj1 A2 2
4 sj2 A1 1
5 sj2 A2 2
6 sj2 A2 2
我想在界面上用dbgrideh控件显示数据如下:
司机 车牌 运输货物量
sj1 A1 2
A2 2
4
sj2 A1 1
A2 4
5
总计 9意思是 sj1送了4吨货物 sj2送了5吨货物, 总计送了9吨货物。
请教大家我想实现的目的能达到吗?感觉挺复杂的,请大家帮忙了,十分感谢!!!
id为主键,
车牌,司机 为string类型,运输货物量为int型数据,有六条记录 意思是两个司机用2个车送货,A1载1吨,A2载2吨.统计每个司机的送货量
id 司机 车牌 配送货物量
1 sj1 A1 1
2 sj1 A1 1
3 sj1 A2 2
4 sj2 A1 1
5 sj2 A2 2
6 sj2 A2 2
我想在界面上用dbgrideh控件显示数据如下:
司机 车牌 运输货物量
sj1 A1 2
A2 2
4
sj2 A1 1
A2 4
5
总计 9意思是 sj1送了4吨货物 sj2送了5吨货物, 总计送了9吨货物。
请教大家我想实现的目的能达到吗?感觉挺复杂的,请大家帮忙了,十分感谢!!!
解决方案 »
- 关于idhttp拷贝服务器上的文件问题----delphi
- 字符串的操作应用问题??
- 如何将当前日期变成指定的格式?
- 关于PageControl的标签TabSheet?
- 如何去掉登陆界面!!!!急,给高分!!!!
- 万急: 用SPCOM控件接收 HT9800的数据包.一直解拆不对.高手帮帮忙拉一把.这二天要交作业了.晕死了
- 怎么看不见,是不是没有创建出来!!!
- paradox中各个表能否建立关联,比如外键约束等?
- 究竟为什么
- D5编了一个MP3播放器,但是在我安装了东方影都后就再了不能播放了,提示 ‘无法初始化设备驱动程序’
- 如何得到ftp的错误的返回值
- dbgrid的数据如何导入到另一个dbgrid中。
用 ROLLUP 汇总数据在生成包含小计和合计的报表时,ROLLUP 运算符很有用。
ROLLUP 运算符生成的结果集类似于 CUBE 运算符所生成的结果集。
CUBE 和 ROLLUP 之间的区别在于: CUBE 生成的结果集显示了所选列中值的所有组合的聚合。
ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。 例如,简单表 #t
中包含:Item Color Quantity
*/
select [Item]=case when grouping([Item])=1 then 'ALL' else isnull(Item, 'UNKNOWN')end,
[Color]=case when grouping([Color])=1 then 'ALL' else isnull([Color],'UNKNOWN')end,
sum([Quantity])[Quantity]
from #t group by [Item],[Color] with rollup
/*
Item Color Quantity
----- ----- -----------
Chair Blue 101
Chair Red 210
Chair ALL 311
Table Blue 124
Table Red 223
Table ALL 347
ALL ALL 658
或者使用联合查询来构造数据集来显示!
回去试试看。
不过,我通常也是用cxGrid处理。
或者,直接写到StringGrid中。
case when grouping(司机)=1 then '总计' else isnull(司机,'') end 司机,
case when grouping(车牌)=1 and grouping(司机)=0 then '' else isnull(cast(车牌 as varchar),'') end 车牌,
sum(配送货物量) as 配送货物量
from
tb
group by
司机,车牌
with rollup
声明:这个是高手答的
把这个整到delphi中你会吧?
adoquery2.SQL.Clear;
adoquery2.SQL.Add('select case when grouping(司机)=1 then ''总计'' else isnull(sj,'''') end 司机,');
adoquery2.SQL.Add('case when grouping(车牌)=1 and grouping(司机)=0 then ''小计'' else isnull(cast(车牌 as varchar),'''') end 车牌,');
adoquery2.SQL.Add('sum(配送货物量) from table1 group by 司机,车牌 with rollup');
adoquery2.Open;
以上是delphi代码在sql-server2000+delphi7环境下测试通过。