这是图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中的数据,该怎么写呢
这是图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中的数据,该怎么写呢
不一样的库,语句有差别。而且你上面说的有矛盾的地方
、X中有Y中也有,但前后两值不变(相当于人没辞职,但这个月没干活,如 aaa ),不显示出来
具体语句就不给了。
你还可以用数组做容器,把rs5 ,rs6用程序处理后形成一个数组,然后再代码动态生成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
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
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. 数