日期:2014-05-18  浏览次数:20400 次

各位大虾,救命啊,关于小计小计再总计的报表``

日期 车号 货物编号 货物名称 现付 提付 电话
2007/10/8 K123 aaa111 XO 1000 0 5849568
2007/10/8 K123 aaa222 篮球 0 200 2849598
小计 1000 200  
2007/10/8 D333 aaa333 自行车 0 200 5946785
2007/10/8 D333 aaa555 苹果 0 100 6584795
小计 0 300  
2007/10/8 F555 aaa598 法拉里 100 0 3359468
2007/10/8 F555 aaa123 科比战靴 0 2500 3462159
小计 100 2500
总计 1100 3000  

如上所表达的样式。当天 发车 三 辆 , 每辆车各有自己的货物。对每辆车的物品进行 合计,也就是小计。
在最后进行 总计,也就是 三辆车所有物品 价钱的总计。(现付,提付 是付款的方式)
谢谢帮忙拉``谢谢!
听说 嵌套GridView可以实现。不知道是不是。
我试图用SQL语句直接搞顶,但是失败了。如下:
select case when (GROUPING(bb.odata) = 1) THEN bb.odata else ISNULL(bb.odata,'UNKNOWN')end as '发货日期',
case when (GROUPING(bb.onumber) = 1) THEN '合计' else ISNULL(bb.onumber,'UNKNOWN')end as '车号',
case when (grouping(c_goodsId)=1) then '合计' else isnull(c_goodsId,'unknown')end as '货物编号',
case when (grouping(c_goodsName)=1)then '合计' else isnull(c_goodsName,'unknown')end as '货物名称',
sum(c_payback)from consign as aa inner join consignment as bb on aa.cid=bb.cid 
group by bb.odata,bb.onumber,c_goodsId,c_goodsName with Rollup

------解决方案--------------------
参考:
http://dotnet.aspx.cc/article/54f4c732-aae2-4135-fb1b-7b4b613baa33/read.aspx
------解决方案--------------------
报表一般都会提供小计总计的功能,一般不是在数据上处理,而是在报表上设计。
------解决方案--------------------
如果想在页面上实现,可以采取 Datalist 双嵌套的方式实现
------解决方案--------------------
可以在Datalist绑定数据时通过增加行的方式实现。
------解决方案--------------------
up
------解决方案--------------------
SQL code

--创建环境
drop table tt
create table tt(mydate datetime,busNum varchar(10),goodsNum varchar(10),goodsName varchar(10),XF int,TF int,tel varchar(10))
    insert into tt  select '2007/10/8','K123','aaa111','XO',1000,0,'5849568'
              union select '2007/10/8','K123','aaa222','篮球',0,200,'2849598'
              union select '2007/10/8','D333','aaa333','自行车',0,200,'5946785'
              union select '2007/10/8','D333','aaa555','苹果',0,100,'6584795'
              union select '2007/10/8','F555','aaa598','法拉里',100,0,'3359468'
              union select '2007/10/8','F555','aaa123','科比战靴',0,2500,'3462159'

--初始数据
select * from tt
日期                       车号   货物编号    货物名称 现付     提付     电话  
------------------------------------
2007-10-08 00:00:00.000    D333    aaa333    自行车    0    200    5946785
2007-10-08 00:00:00.000    D333    aaa555    苹果    0    100    6584795
2007-10-08 00:00:00.000    F555    aaa123    科比战靴    0    2500    3462159
2007-10-08 00:00:00.000    F555    aaa598    法拉里    100    0    3359468
2007-10-08 00:00:00.000    K123    aaa111    XO    1000    0    5849568
2007-10-08 00:00:00.000    K123    aaa222    篮球    0    200    2849598

--执行SQL语句
select a.mydate,a.busNum,a.goodsNum,a.goodsName,a.XF,a.TF,a.tel from
(
select convert(varchar(10),mydate,111) as mydate,busNum,goodsNum,goodsName,XF,TF,tel,1 as myTemp,busNum as bn from tt 
union
select '小计',null,null,null,sum(XF),sum(TF),null,2 as myTemp,max(busNum) as bn from tt group by busNum
union
select '总计',null,null,null,sum(XF),sum(TF),null,3 as myTemp,max(busNum) as bn from tt
) a order by a.bn,a.myTemp

--查询结果
日期              车号   货物编号    货物名称 现付     提付     电话  
------------------------------------
2007/10/08    D333    aaa333    自行车    0    200    5946785
2007/10/08    D333    aaa555    苹果    0    100    6584795
小计             NULL    NULL    NULL    0    300    NULL
20