以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  需求数量与可供给数量匹配的问题(OK)  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=49813)

--  作者:scott518
--  发布时间:2014/4/24 14:03:00
--  需求数量与可供给数量匹配的问题(OK)

物料需求表和采购在线两张表都按产品编码和日期排列好了(两表都有近万行数据),如何将采购在线中的累计交货数量高效的提取到物料需求表中;要满足以下条件:

1、  当采购在线中的交货日期=物料需求中的交货日期时,直接将累计交货写入到物料需求表相同的产品编码所在行的可供给量中;

2、如果采购在线表中没有与物料需求中相同的交货日期时,只能用小于需求日期的最近一个交货日期的累计交货数量写入到物料需求表中。如:2014-04-12没有交货,则用2014-04-11或之前的相同产品编码的累计交货数量填充。

 

提取按钮中的代码要如何写才最高效?谢谢!

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:需求数量匹配.table

[此贴子已经被作者于2014-4-25 16:07:38编辑过]

--  作者:y2287958
--  发布时间:2014/4/24 14:58:00
--  

物料需求表的DataColChanged


Dim dr As DataRow = e.DataRow
If e.DataCol.Name = "产品编码"
    Dim s As String = "产品编码=\'" & dr("产品编码") & "\' and 交货日期<=#" & dr("需求日期") & "#"
    Dim dr1 As DataRow = DataTables("采购在线").Find(s,"交货日期 Desc")
    If dr1 IsNot Nothing
        dr("可供给量") = dr1("累计交货")
    End If
End If

--  作者:有点甜
--  发布时间:2014/4/24 15:02:00
--  

参考二楼代码,按钮代码这样写。效率如果很慢的话,再优化。

 

Dim filter As String = "需求日期 > #" & new Date(2014,04,12) & "#"
DataTables("物料需求").DataCols("产品编码").RaiseDataColChanged(filter)


--  作者:有点甜
--  发布时间:2014/4/24 15:03:00
--  

 优化可以参考这一章

 

http://www.foxtable.com/help/topics/2219.htm

 


--  作者:scott518
--  发布时间:2014/4/24 15:33:00
--  
谢谢两位老师,我再想想看,原来是想将两张表查询到一起排好序后再加载到前台来,(因为两张表其实都是不用输入的,是从sql数据库中的多张表表查询得到的)
--  作者:有点甜
--  发布时间:2014/4/24 15:52:00
--  
以下是引用scott518在2014-4-24 15:33:00的发言:
谢谢两位老师,我再想想看,原来是想将两张表查询到一起排好序后再加载到前台来,(因为两张表其实都是不用输入的,是从sql数据库中的多张表表查询得到的)

 

那样的话,把代码改一下也可以用了。

 

Dim filter As String = "需求日期 > #" & new Date(2014,04,12) & "#"
For Each dr As DataRow In DataTables("物料需求").Select(filter)
    Dim s As String = "产品编码=\'" & dr("产品编码") & "\' and 交货日期<=#" & dr("需求日期") & "#"
    Dim dr1 As DataRow = DataTables("采购在线").Find(s,"交货日期 Desc")
    If dr1 IsNot Nothing
        dr("可供给量") = dr1("累计交货")
    End If
End If


--  作者:有点甜
--  发布时间:2014/4/24 15:53:00
--  
 加一句,如果是查询表,那完全可以自己用sql语句生成你想要的东西,而不用查找填充。
--  作者:zpx_2012
--  发布时间:2014/4/24 15:58:00
--  

[此贴子已经被作者于2014-4-24 15:58:07编辑过]

--  作者:scott518
--  发布时间:2014/4/25 10:56:00
--  

弄了很久,sql的查询还是不会写,求助:

 

select 产品编码,需求日期,sum(需求数量) as 需求数量 from 物料需求表 group by 产品编码,需求日期

select 产品编码,交货日期,sum(交货数量) as 预计交货 from 采购在线表 group by 产品编码,交货日期

 

要将上在的两个表按产品编码联合查询为一个表(产品编码,需求日期,需求数量,预计交货 四个字段)如果交货日期不等于需求日期时取小于需求日期的最近的一个交货日期的预计交货数量即可。下面的写法好像不正确:

 

select 产品编码,需求日期,sum(需求数量) as 需求数量,(select top 1 预计交货 from b) from 物料需求表 a group by 产品编码,需求日期 left join (select 产品编码,交货日期,sum(交货数量) as 预计交货 from 采购在线表 group by 产品编码,交货日期 order by 交货日期 DESC) b where b.产品编码 = a.产品编码 and b.交货日期 <= a.需求日期


--  作者:有点甜
--  发布时间:2014/4/25 11:14:00
--  

 感觉过于复杂了,不建议编写那么长的查询语句。

 

 你这样做吧,你去数据库里建立两个 视图, 把那两个表的sql语句写好,直接引用视图比较好

 

Select 产品编码,需求日期, 需求数量, (Select Top 1 预计交货 from {视图2} As b where a.产品编码 = b.产品编码 and b.交货日期 <= a.需求日期 order by b.交货日期 desc) As 预计交货 from {视图1} As a