请问如果进行横向统计? ( 积分: 200 )

  • 主题发起人 主题发起人 hehuan
  • 开始时间 开始时间
H

hehuan

Unregistered / Unconfirmed
GUEST, unregistred user!
比如我要统计某一行的属性1+属性2+……+属性N的值,太长了,没法在SQL里写全,请问有什么办法吗?

我用的是MySQL

谢谢。。。
 
用for..do 呀
 
with adoquery do
begin
close;
sql.text := ' select * from table where 1 =2 ';
open; //取回所有字段
for i := 0 to fieldcount -1 do //0是要汇总的字段起点
if s = '' then
s := fieldname
else
s := s + '+' +fieldName
s := 'sum(' + s + ') as hj'; //行汇总
close;
sql.text := ' select ' + s + ' from table ';
open;
end
 
adotable1.first;
cc:=0;

not adotable1.eof do
begin
for i:=1 to 30 do
begin
cc:=fieldcount (i)+cc;

end;
next;
cc:=0;
end;
 
写程序就是找规律 ,一些重复的工作里面有什么特征是相同的,归纳出来 再用相应语法去实现 这就是你的工作 不然就是自己和电脑拼体力没区别
 
"写程序就是找规律 ,一些重复的工作里面有什么特征是相同的,归纳出来 再用相应语法去实现 这就是你的工作 不然就是自己和电脑拼体力没区别"
说的好,就是这样,
程序的本质就是逻辑,发挥你的想象力,创造力。
 
同意二樓和底樓
 
如果列数是固定不变了,我觉得你也可以使用视图来实现,楼上循环是可以实现,但是如此行数较多,效率可能比较低一点!
如:
select f1+f2+f3....+fn as mysum from table
 
procedure TPosStatiCls.btn1Click(Sender: TObject);
var
s:String;
i:Integer;
begin
with adoquery1 do
begin
close;
sql.text := ' select * from appel where 1 =2 ';
open; // recuperer tous les fields
for i := 0 to fieldcount -1 do // a partir de 0
if s = '' then
s := Fields.fieldname
else
s := s + '+' +Fields.fieldName;
ShowMessage(s);
s := 'sum(' + s + ') as hj'; // sum(app_1+app_2+...+app_50+app_desc)
close;
sql.text := ' select ' + s + ' from table ';
open;
end
end;
 
后退
顶部