这是图X:
这是图Y:
这是图Z:请教高手一下,能不能由 图X 和 图Y 这两张表,计算得到 图Z 呢?计算规则是:
1、X中有但Y中没有的(相当于有人上个月在,这个月辞职了,如 eee ),不显示出来
2、X中有Y中也有,但前后两值不变(相当于人没辞职,但这个月没干活,如 aaa ),不显示出来
3、前提同上,X中有Y中也有,但前后数值有增加(相当于这个月他干活了,如 ccc ),显示出来
4、X中没有但Y中有,不过Y中的值为0(相当于他这个月刚加入进来,还没干活,如 ggg ),不显示出来
5、前提同上,X中没有但Y中有,而且Y中的值不为0(相当于这个月刚加入进来的他有干活,如 fff ),显示出来把有干活的都显示出来,并把干了多少活(即数值差)也列出来,构成一张表,如图Z小弟现在已经以记录集的方式把数据显示出来了,只是显示出来而已,并没有存到数据库
图X对应的记录集为rs5
图Y对应的记录集为rs6大哥们能不能构造成rs7,用来放置图Z中的数据,该怎么写呢

解决方案 »

  1.   

    用子查询就可以啊,UNION 也行。方法很多了~~注意用左右连接
    不一样的库,语句有差别。而且你上面说的有矛盾的地方
    、X中有Y中也有,但前后两值不变(相当于人没辞职,但这个月没干活,如 aaa ),不显示出来 
    具体语句就不给了。
    你还可以用数组做容器,把rs5 ,rs6用程序处理后形成一个数组,然后再代码动态生成rs7.
      

  2.   

    用数组生成rs7不难吧?
    With Rs7
    .Fields.Append "字段1", adVarWChar, 50
    .Fields.Append "字段2", adVarWChar, 50, adFldIsNullable
                                    
    .CursorType = adOpenStatic
    .LockType = adLockOptimistic
    .Open
    .AddNew
    .Fields("字段1").Value = "值"
    .Fields("字段2").Value = "值"
    .Update
    End With
      

  3.   

    先谢谢您!没矛盾啊,就是说他没有辞职(还在人事档案中),但因为他没业绩(前后数值一样代表没业绩),所以不显示出来您的方法小弟看不懂,我是用Access的,我从别的老师那得到了一个SQL语句可以解决这个问题这个SQL语句是这样的:SELECT 后.字段1 AS 名, 后.字段2-IIf(IsNull(前.字段2),0,前.字段2) AS 数 FROM 后 LEFT JOIN 前 ON 后.字段1 = 前.字段1;但就是不知道该如何在VB中由(rs5、rs6和上面的SQL语句)这三者来生成记录集rs7,代码该怎样写呀
      

  4.   

    SQL语句中的“前”代表rs5,也就是图X,   “后”代码rs6,也就是图Y
      

  5.   

    ' 定义Rs7数据行所对应的结构体
    Public Type TyRs7
      Str名 As String
      FL数 As float
    End Typesub sub1()
    dim ArrRs7() as TyRs7
    dim i as long
    ReDim Preserve  ArrRs7(rs6.RecordCount)
    '       定义Rs7所对应的数组
    '-------------------实现SQL的作用---------------------------
    rs6.Movefirst
    i=0
    Do Until rs6.EOF
      ArrRs7(i).str名=rs6.fields(1).value & ""
      ArrRs7(i).fl数 =val(rs6.fields(2).value & "")
      rs6.MoveNext
      i=i+1
    Loop
    rs5.Movefirst
    Do Until rs5.EOF
      for i=0 to rs6.RecordCount -1
         if ArrRs7(i).str名=(rs5.fields(1).value & "") then
            ArrRs7(i).fl数 =ArrRs7(i).fl数 - val(rs5.fields(2).value & "")
         endif
      next
      rs5.MoveNext
    Loop
    '------------------------------------------------------------
    Set Rst7 = New ADODB.Recordset
    With Rs7 
    .Fields.Append "名", adVarWChar, 30, adFldIsNullable 
    .Fields.Append "数", adDouble
                                    
    .CursorType = adOpenStatic 
    .LockType = adLockOptimistic 
    .Open 
    for i=0 to UBound(ArrRs7)
      if ArrRs7(i).fl数 > 0 then 
    .AddNew 
    .Fields(1).Value = ArrRs7(i).str名
    .Fields(2).Value = ArrRs7(i).fl数
    .Update 
      endif
    next
    End With

    end
      

  6.   

    用记事本写的,有很多漏洞,还望见谅!最后起码end也要改成 end sub
      

  7.   

    1\取Y有X没有且在Y中不为0的:
    select y.名,y.数 from y where y.数<>0 and y.名 not in (select distinct x.名 from x)
    2\取Y有且X有且不相等的
    select x.名,y.数-x.数 as 新数 from y inner join x on x.名=y.名 and y.数>x. 数
    3\用union语句把上面两个结果合起来应该就是你要的最终结果了:select y.名,y.数 from y where y.数<>0 and y.名 not in (select distinct x.名 from x)
    union
    select x.名,y.数-x.数 as 新数 from y inner join x on x.名=y.名 and y.数>x. 数
      

  8.   

    辛苦你写出SQL,我在3楼写的那个SQL也可以,但小弟不知道该如何把SQL语句应用到VB的记录集上面去,是用Execute吗,代码的格式是怎样的呢