圣诞节晚上仍工作的人,高分提问了,祝圣诞快乐!!(100分)

  • 主题发起人 主题发起人 stoneking
  • 开始时间 开始时间
S

stoneking

Unregistered / Unconfirmed
GUEST, unregistred user!
[red]有一个这样的表:
id other number
1 ... 2.1
2 4.02
3 3.23
1 2.2
2 3.2
3 1.12
1 4.2
1 5.3
2 23.2
3 2332.2
要做的事是,把所有id为1,2,3的number 合计,就是说每条id为1,2,3记
录的number为他们的和,即结果是这样的:
id other number
1 ... 13.7
2 30.1
3 27.5
1 13.7
2 30.1
3 27.5
1 13.7
1 13.7
2 30.1
3 27.5
记录比较多,请富翁们救救我这个在圣诞夜还在卖的可怜的程序员吧.55555555[/red]
 
select 表.id,表.other,table_a.id_sum
from 表,
(select id,sum(number) as id_sum
from 表
group id) as table_a
where 表.id=table_a.id

------------------------------
测试通过,给分吧!
不懂再问!
 
你的结果会出现很多相同记录的,我不会做

select sum(number) from table group by id
 
先求出来,再更新吧
 
你在后面加group by不就可以了?
 
定义一个双精度数组:var number:array of [1..3] double;
计算出a,b,c的值(及你所表达的数的和)
select sum(number) as number_tmp from 数据表 group by id where id in [1,2,3]
这样会查出三条记录,把所得的三条记录分别赋值给a,b,c
var i:integer;
begin
i := 1;
ADOQuery1.open;
while not ADOQuery1.eof do
begin
number := ADOQuery1.fieldvalues['number_tmp'];
ADOQuery1.next;
inc(i);
end;
end;
第三步:通过SQL语句把number[]里的三个变量放到数据库中
for i:=1 to 3 do
begin
ADOQuery1.close;
ADOQuery1.sql.clear;
ADOQuery1.sql.Add('update 数据表 set number = :cy1 where id = :cy2');
ADOQuery1.parameters.parambyname('cy1').value := number;
ADOQuery1.parameters.parambyname('cy2').value := i;
ADOQuery1.ExecSQL;
end;

没来得及试,随便写的,可能方法不算太好,但能通得过!!!
你自己试试,希望能成功!!
 
这条 我没有调试 你可以试试看 大该没有文题
select a.id,b.number from table as a left join ( select sum(number) as number from table group by id)
as b on a.id=b.id
 
这条 我没有调试 你可以试试看 大该没有文题
select a.id,b.number from table as a left join ( select id, sum(number) as number from table group by id)
as b on a.id=b.id
 
我这里只有一个表,并且不是只要select 出来,是要实实在在地写进这张表里,选择
的我已经做好了,与大家共享:
select Distinct id ,Sum(number) As f_temp from table_a group by id
这是有效的,但要写进来就有点难度了,希望大家继续帮忙好吗?
 
多么让我失望,我还想在平安夜把分给散出去,没想到才这么点人回答.
我出了个笨办法,与大家共勉:
with query1 do
begin
close;
sql.Clear ;
sql.Add('select id , Sum(number) As number from table_a group by id ') ;
prepare;
open;
end;
query1.First ;
for i:=0 to query1.RecordCount -1 do
begin
with query2 do
begin
close;
sql.Clear ;
sql.Add('update table_a set number= '''+floattostr(query1.fieldbyname('number').AsFloat)+'''');
sql.Add(' where id ='''+ query1.fieldbyname('id').AsString );
prepare;
execSql;
end;
query1.Next;
end;
 
问题仍然没有解决,上面我那个效率太低,现在我想换一个方式问大伙:
我有两个表
price
id price
1 12
2 32
3 23
1 32
2 32
3 32
temp
id price
1 44
2 64
3 55
两表结构一样,temp 是第二列是price 中相同id的price的和
怎么把temp中的price 写到price表中,结果为:
price
id price
1 44
2 64
3 55
1 44
2 64
3 55

 
多人接受答案了。
 
后退
顶部