在一个表中有15个字段(a1---a15),其中有的记录中a6--a10字段有数据,有的没有,我想用有数据的记录中的A6--A10去填充那些没有数据的记录,怎么写SQL?我用的ACCESS,我复制了一个表,想这样用,可是不行,怎么做?
update tjjg set wbc=a.wbc,lym=a.lym,mon=a.mon,gra=a.gra,lymb=a.lymb,monb=a.monb,grab=a.grab,rbc=a.rbc,hgb=a.hgb,hct=a.hct,mcv=a.mcv,mch=a.mch,mchc=a.mchc,rdw=a.rdw,plt=a.plt,mpv=a.mpv,pct=a.pct,pdw=a.pdw from tjjg,tjjg1(为复制的表) a  where  a.wbc<>''  and tjjg.dw like

解决方案 »

  1.   

    好像实现不了的吧,至少按照你目前的描述做不到的。那些a6--a10字段有数据的记录,应该有多条,而且值可能是不一样的。那你到底要哪个值来更新那些a6--a10字段没有数据的记录呢?你的方法肯定是不行,因为你的那两个表结构是一样的,数据也是一样的(因为你是复制的嘛)。你现在用关联的方法来更新,在tjjg中,a6--a10字段有数据的记录,在tjjg1中也是有数据的;在tjjg中,a6--a10字段没有数据的记录,在tjjg1中也是没有数据的,所以你等于什么都没有做。
      

  2.   

    我用delphi7做了个倒数据的程序,可以插入新记录,但用它来修改原有记录就不行了,为什么?
    我用了两个memo来作为写SQL语句的地方,连接两个不同数据库,第一个只用来查询,第二个也可查询也可将第一个查询的结果写入,代码如下://将ADOQUERY1的数据全部写入ADOQUERY2(字段格式相同)
    procedure TForm1.Button2Click(Sender: TObject);
     var s2:string;//
    begin
      s2:=memo2.Text;
     Try
     ADOConnection2.Connected:=true;
     except
     messagedlg('目标数据库未打开!',mtError,[mbOK],0);
     abort;
     end;
     adoquery2.Close;
     adoquery2.SQL.Clear;
     adoquery2.SQL.Add(s2);
     adoquery2.Open;
     while not(adoquery1.eof) do
     begin
     adoquery2.Insert;
     for i:=0 to adoquery1.fieldcount-1 do
     begin
     adoquery2.Fields[i].AsString:=adoquery1.fields[i].asstring;
     end;
     adoquery1.next;
     i:=i+1;
     end;
     adoquery2.Post;
     ADOquery2.Close;
    end;
    这样插入可以(insert),但我这样用来修改(把insert改成edit)就不行,同一条记录影响到多行,我的目的是一行换一行啊。为什么?怎么做?不够加分。
      

  3.   

    知道你的意思了,用有数据的记录填充该列没有数据的记录
    update kkk set a2 = (select top 1 a2  from kkk where a2 is not null)  where a2 is null
    --上面是我做测试用的不需要用两个表。你用下面的试试:update tjjg set a6 = (select top 1 a6  from kkk where a6 is not null)  where a6 is null把a6到a10中每个字段都执行一次update
      

  4.   

    错了
    update tjjg set a6 = (select top 1 a6  from tjjg where a6 is not null)  where a6 is null
    update tjjg set a7 = (select top 1 a7  from tjjg where a7 is not null)  where a7 is null
    update tjjg set a8 = (select top 1 a8  from tjjg where a8 is not null)  where a8 is null
    ………………把a6到a10中每个字段都执行一次update
      

  5.   

    必须用 top 1?
    我是想用有数据的好多条记录去填充那些没有数据的列,而且填充后的数据不能是相同的。
    如:用id 为1 和2 的两条记录中的值去填充 ID为27、28中的A6--A10
      ID  A6  A7  A8  A9  A10    ID  A6  A7  A8  A9  A10  
      1  3.2  2.1 0.35 2.8  0.56   27  3.2  2.1 0.35 2.8  0.56
      2  2.95 3.1 0.56 2.57  0.64   28  2.95 3.1 0.56 2.57  0.64顺便帮我看一下我的那个程序中的错误。
      

  6.   

    原来是这样,那就用你delphi写的程序吧。但是我想知道你数据库中的记录怎么会出现这样的情况?
      

  7.   

    你的程序显然有错:
    while not(adoquery1.eof) do
     begin
     adoquery2.Insert;
     for i:=0 to adoquery1.fieldcount-1 do
     begin
     adoquery2.Fields[i].AsString:=adoquery1.fields[i].asstring;
     end;
     adoquery1.next;
     /////////////////i:=i+1;////这里把i:=i+1;去掉
     end;
     adoquery2.Post;//////////这里把post改在循环里面
     ADOquery2.Close;
      

  8.   

    我还是建议你用update语句,有id列不用担心数据会重复
      

  9.   

    如下这样就合附条件的整个表的数据都修改了update [表名] set a1=a6, a2=a7, a3=a8, a4=a9, a5=a10 where a1='' and a2='' and a3='' and a4='' a5=''
      

  10.   

    我测试可以通过。请光临http://www.13yi.com(建设中)
      

  11.   

    我是这样的意思,在同一个表中有的记录A6--A10有数据,有的A6--A10没有数据,我想用那些有数据的A6--A10去填充那些没有数据的记录,就像是用EXECL中的复制和粘贴,不牵扯ID,也不能修改ID。
      

  12.   

    procedure TForm1.Button5Click(Sender: TObject);
    var s2:string;
    begin
      s2:=memo2.Text;
     Try
     ADOConnection2.Connected:=true;
     except
     messagedlg('目标数据库未打开!',mtError,[mbOK],0);
     abort;
     end;
     adoquery2.Close;
     adoquery2.SQL.Clear;
     adoquery2.SQL.Add(s2);
     adoquery2.Open;
     while not(adoquery1.eof) do
     begin
     adoquery2.edit;
     for i:=1 to adoquery1.fieldcount-1 do  //改成=1是为了观察ID号
     begin
     adoquery2.Fields[i].AsString:=adoquery1.fields[i].asstring;
     end;
     adoquery2.Post;
     adoquery2.Next;//加了个这个向下滚动
     adoquery1.next;
     end;
     ADOquery2.Close;
    end;
    改成这样行了,update可能达不到目的。
    准备结了。谢谢大家。
      

  13.   

    我是这样的意思,在同一个表中有的记录A6--A10有数据,有的A6--A10没有数据,我想用那些有数据的A6--A10去填充那些没有数据的记录,就像是用EXECL中的复制和粘贴,不牵扯ID,也不能修改ID。
    -----------------------------------------------------------------------------
    是用任一个有数据的记录去填充没有记录的,还是有什么特别的条件-----------------------------------------------------------------------------
    如果是任一个就简单啦,找一个有记录的,记录下A6-a10的值
    再update就行
      

  14.   

    我是这样的意思,在同一个表中有的记录A6--A10有数据,有的A6--A10没有数据,我想用那些有数据的A6--A10去填充那些没有数据的记录,就像是用EXECL中的复制和粘贴,不牵扯ID,也不能修改ID。完全符合要求:update [表名] set a1=a6, a2=a7, a3=a8, a4=a9, a5=a10 where a1='' and a2='' and a3='' and a4='' a5=''你试一下就知道了。
      

  15.   

    update [表名] set a1=a6, a2=a7, a3=a8, a4=a9, a5=a10 where a1='' and a2='' and a3='' and a4='' a5=''
    用这个方法应该是不行的,我要求的是A6=A6,A7=A7......A10=A10。所以update可能不好用。谢谢大家。
    另问一句,用ADOConnection连接一个*.dbf文件怎么写adoconnection.ConnectionString?
      

  16.   

    实在是不清楚了。A6=A6 A7=A7还有什么意义?是指同一条记录还是上一条记录?
      

  17.   

    哈,对不起大家,我的表达能力确实有问题。
    其实我的意思 是这样的:
    就像在EXECL中将[sheet1]中的A1:J15区域中的数据复制后粘贴到[sheet1]中的A16:J30间的空白区域中,大家试一下看看。
    谢谢大家。快结帖了。