Help me!!,我想将每列数据总和并插入原表中 (20分)

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

sweidong

Unregistered / Unconfirmed
GUEST, unregistred user!
有数据表yourtable我想将每列数据总和并插入原表中:(每列都是int型)
我用insert into yourtable select sum(列1),sum(列2),sum(列3),sum(列4),sum(列5) from youtable
运行出错(this mismatch in expression.)可是用其他的函数如:max,min,count进行insert
一切正常,为什么!为什么!
 
有人帮我吗!
 

你打开Excel,在A1,A2中输入两个整数
在A3中输入 ‘=Sum(A1:A3)’,回车
出错了吧,参考一下错误的原因,和你的问题类似。

也许你只能用内存变量中转一下了,先汇总到变量中,在追加到表中。
 
可是我用insert into table1 (列1,列2,列3)
select sum(列1),sum(列2),sum(列3) from table2 也出错!,用count,max就行!
 
这样可以。
insert into table1(col1,col2)
select sum(col1),sum(col2) from table1

SQL Server 2000下。Table1 两个字段Col1、Col2均为int,可空,无主键。
 
有主键,非空也没问题呀。
 
有字段为空的时候,直接在SQL分析器里面执行,也可以。
但是出了一条警告:如下
警告: 聚合或其它 SET 操作消除了空值。
 
group by What?
 
不行,还是不行,在delphi5.5 query中运行还是出错!!?
 
我马上就到Query中去测,稍等!
 
放置普通Query,全部取默认属性,连接SQL Server2000服务器,下面代码:
with Query1 do
begin
Close;
SQL.Text := 'insert into table1(col1,col2) select sum(col1),sum(col2) from table1';
ExecSQL;
end;
没有问题,我想你还是将代码贴出来,大家讨论一下。OK?
 
谢谢yzhshi为我尽力!!


unit Unit3;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids, DBGrids, Db, DBTables, ExtCtrls, DBCtrls;

type
TForm1 = class(TForm)
DataSource1: TDataSource;
Query1: TQuery;
DBGrid1: TDBGrid;
Button1: TButton;
DBNavigator1: TDBNavigator;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
VAR
J:INTEGER;
begin //生成数据表
query1.sql.clear;
query1.SQL.add('create table tb3');
query1.SQL.add('(c0 int,');
query1.SQL.add('c1 int,');
query1.SQL.add('c2 int,');
query1.SQL.add('c3 int)');
query1.execsql;

FOR J:=0 TO 5 DO
BEGIN
query1.sql.clear;
query1.sql.add('insert into tb3 values(:a0,:a1,:a2,:a3)');
query1.parambyname('a0').asinteger:=1+J;
query1.parambyname('a1').asinteger:=2+J;
query1.parambyname('a2').asinteger:=3+J;
query1.parambyname('a3').asinteger:=4+J;
query1.execsql;
END;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
query1.sql.clear;
query1.sql.add('select * from tb3');
query1.Open; //查看
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
query1.SQL.Clear;
query1.SQL.add('insert into tb3 select sum(c0),sum(c1),sum(c2),sum(c3)');
query1.SQL.add('from tb3');
query1.execsql; //合计插入
end;
end.
 
马上就实验!
趁着晚上没胡涂以前争取找出问题[:)]
 
老兄,没问题呀!
下面是Query分析器查询的结果!
c0 c1 c2 c3
----------- ----------- ----------- -----------
1 2 3 4
2 3 4 5
3 4 5 6
4 5 6 7
5 6 7 8
6 7 8 9
21 27 33 39
 
对了,你是否更改了Query的属性?(我有些胡涂了[8D])
 
即使更改属性也应该没问题呀。
因为你使用的是一个Query,而且使用SQL语句进行操作呀。
这样,我把代码重新贴上,你拷贝过去执行。
记住,仅仅放三个Button,然后分别加时间,不要那些DBGrid了(我这里实验用了那些东西)
还有,你所使用的数据库是什么?我的是SQL Server 2000,没有在Access上面实验。
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Db, DBTables, Grids, DBGrids;


type
TForm1 = class(TForm)
Query1: TQuery;
Button1: TButton;
Button2: TButton;
Button3: TButton;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
VAR
J: INTEGER;
begin //生成数据表
query1.sql.clear;
query1.SQL.add('create table tb3');
query1.SQL.add('(c0 int,');
query1.SQL.add('c1 int,');
query1.SQL.add('c2 int,');
query1.SQL.add('c3 int)');
query1.execsql;

FOR J := 0 TO 5 DO
BEGIN
query1.sql.clear;
query1.sql.add('insert into tb3 values(:a0,:a1,:a2,:a3)');
query1.parambyname('a0').asinteger := 1 + J;
query1.parambyname('a1').asinteger := 2 + J;
query1.parambyname('a2').asinteger := 3 + J;
query1.parambyname('a3').asinteger := 4 + J;
query1.execsql;
END;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
query1.sql.clear;
query1.sql.add('select * from tb3');
query1.Open; //查看
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
query1.SQL.Clear;
query1.SQL.add('insert into tb3 select sum(c0),sum(c1),sum(c2),sum(c3)');
query1.SQL.add('from tb3');
query1.execsql; //合计插入
end;
end.
 
不好意思!我试了三遍了,都没实现。哦,我把我的系统说一下,winme+delphi5.0,控件来自本身的dataaccess和
datacontrols。我没有SQL Server 2000。
 
可是我用insert into table1 (列1,列2,列3)
select sum(列1),sum(列2),sum(列3) from table2 也出错!,用count,max就行!
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
insert into table1 (列1,列2,列3)
select sum(列1) as 列1, sum(列2) as 列2, sum(列3) as 列3 from table2
 
后退
顶部