最常用的报表和sql语句,明天早上交货啦,帮帮忙。。。好急呀!!!!!(100分)

  • 主题发起人 主题发起人 joyman
  • 开始时间 开始时间
J

joyman

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在有个work表
id a b c
张三 1 1 1
李四 2 2 2
王五 3 3 3
张三 2 2 2
李四 3 3 3
王五 5 5 5


我想得出这样的报表:张三
1 1 1
2 2 2
合计: 3 3 3
李四
2 2 2
3 3 3
合计: 5 5 5
王五
3 3 3
5 5 5
合计: 8 8 8

总计: 16 16 16
sql如何写呀,高手们请教啦,救救小弟呀!!!!1
 
小弟我有一个笨方法:
begin
Query1.SQL.Text := 'select id from work group by id'
while not query1.eof do begin
Query2.SQL.Add('insert into ##Tmp select * from work where id = '
+ #39 + Query1.FieldByName('id').AsString + #39 );
Query2.SQL.Add('insert into ##Tmp Select ' + #39 + '合计' + #39
+ ',' + Sum(a),sum(b),sum(c) where id=' + #39 + Query1.FieldByName('id').AsString + #39);
Query1.Next;
end;
//你要的数据就在##Tmp表中了。

呵呵。听听其他高手的吧。
 
先GROUP BY id
再先一个SUM
再把得到的结果和原库合并,然后执行
ORDEY BY id 就可以了!
 
select * from work

在report 中用 qrgroup
 
这个完全可以打印报表时实现.先按id排序.然后再按id分组,分组加总不就可以了.
 
天啊,这么简单的SQL都不会,我教你吧!
sql="select sum(a),sum(b),sum(c) from word group by id"
集函数一旦使用group by后,集函数就作用在组上
 
同意zwma,用报表的分组功能实现很容易的,我做过的,不必写很复杂的sql语句。
 
多谢sundart和相助,但那样的话速度太慢了,我要处理十万条记录的

我对zwma和zml的说法有点模糊,用了qrgroup但不知Expression怎样写
可以详细点吗,到时我死了死出200分给你们啦!谢谢大侠们
 
同意:tianye606
 
在分组条件中只要加入相应的字段就可以了,比如 Query1.field1
 
你有work表难道没有employee表吗
一连接就行了。然后 sum一下。
 
多谢各位,现在可以分组啦,但求出的合计值全是0,
》tbase 我只有一个work表,不用连接的
 
其实你用QuickReport的分组功能,组头用id
 
现在我可以求合计值啦,但为什么求出的值是这个组的合计值累加上一个组的值的

一直累下去的呢?
我用的是qrexpr求的和,它的expression属性该怎么写?
 
看来你求和时没有注意所用控件的属性,控件属性中有一个是求和后归零的(具体怎么
写的忘了),你把它设置一下就可以了。
 
用TClientDataset它有这个功能

TClientDataSet.Aggregates

按 ID分组,ID排序。
 
select '张三'as id,a,b,c from work where id='张三'
union
(select '合计'as id, sum(a) as a,sum(b) as b,sum(c) as c from work where id='张三')
union........
 
qrexpr的expression属性中写SUM(work.a),不同的字段需要多个qrexpr,并且把ResetAfterPrint
属性设为True即可。
 
接受答案了,多谢各位大侠相助!!
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部