我要对一个表进行批量插入数据,SQL语句如下:
str:='insert into cbjl(yhbh,sbbh,yslx,dj,qsds,zzds,ysl,ssqy,nd,yf)'+
     'select sbzl.yhbh,sbzl.sbbh,sbzl.yslx,sbzl.sj ,cbjl.zzds,0,0,sbzl.ssqy,'+
     ''''+edit1.Text+''' as nd,'''+combobox1.Text+''' as yf from sbzl'+
     'left join cbjl on(sbzl.sbbh=cbjl.sbbh) where cbjl.yf='''+inttostr(i)+'''';
i 表示上个月的月份.cbjl.zzds这个是上个月的ZZDS的值.也就是说.在插入下个月的记录时.要将上个月的ZZDS(终止读数)赋给下个月的QSDS(起始读数).现在问题是.如果上个月的ZZDS如果是0的话,则要查询该月的再上一个月的ZZDS直到不为0时,才能将它的ZZDS赋给要插入的这个月的QSDS.那要怎么去判断呢? 每个月都有很多条记录.并且有可能只是其中一条或多条的ZZDS为0~~~!!!
 起先我是对月份进行循环判断.再对每个月的每条记录进行判断.可发现很难实现.各位有什么好的办法??啊?~~~~救救我啊~~~~

解决方案 »

  1.   

    起先我是对月份进行循环判断.再对每个月的每条记录进行判断.可发现很难实现
    ---
    我觉得这个可以直接用sql解决
    case …… then ……
    不知可不可行
      

  2.   

    哦~~有考虑过,可是插入的时候是成批插入的.但又要一条条记录检测过去~~~头都大了啊
    如果改变了那个STR中的where  条件的话.所有的记录都会变.但要的只是不符合条件的记录需要变动~~
      

  3.   

    关键是底下那个查询语句
    select case 12月数据 when 0 then 
      (case case 11月数据 when 0 then ……)
      else 12月数据……
    没什么吧,写的复杂些,执行起来就快了
      

  4.   

    昨天搞了一天头都大了~~~~每次录入数据时将QSDS和ZZDS都变为一样的,管它有这个月或是下个月有没有抄表~~等到再次录入数据时,得到的还是最初的ZZDS~~~呵`~~搞定~!
    --------------------------
    swimming8243(swimming)~~~~谢谢你了,改天有空我试下你的方法~~嘿~