首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > VFP >

类似于顺序婚配,请帮忙

2013-04-09 
类似于顺序匹配,请帮忙本帖最后由 dkfdtf 于 2013-03-22 21:05:17 编辑表1表2NONANEVALUEEXP1ORD(查找的先

类似于顺序匹配,请帮忙
本帖最后由 dkfdtf 于 2013-03-22 21:05:17 编辑

表1                                                 表2
NO  NANE                VALUE     EXP1    ORD(查找的先后顺序)   NANE    PRICE
1   上衣                 100      1000                1        上衣      10
2   上衣,标签           200      2000                2        标签      20
3   书,皮带,标签       300      6000                3        皮带      30
4   皮带,提单           400     12000                4        书        40
5   提单,标签,上衣     500      5000                5        提单      50
6   小册子               600    (空白)


表1为不固定的数据,表2为标准数据

表1的NANE  及VALUE是已知,现在需要通过匹配表2的标准,赋予表1的EXP值。




[解决办法]
Select Max(ord) From 表2 Into Array aTemp
nMaxOrd = aTemp[1]

Select 表1
Scan All
    cName = Name
    Alines(aTemp, Name, 1+4, ',')
    nPrice = 0
    nOrd = nMaxOrd
    Select 表2
    For ii = 1 To Alen(aTemp)
        Locate For Alltrim(Name) == aTemp[ii]
        If Found() And ord < nOrd
            nOrd = ord
            nPrice = price
        Endif
    Endfor
    Select 表1
    Replace Next 1 exp1 With Value * nPrice
Endscan

[解决办法]
CREATE CURSOR T1 (NO N(8),NAME C(20),VALUE N(8),EXP1 N(8)) 


INSERT INTO T1 (NO,NAME,VALUE) VALUES (1,[上衣],100)
INSERT INTO T1 (NO,NAME,VALUE) VALUES (2,[上衣,标签],200)
INSERT INTO T1 (NO,NAME,VALUE) VALUES (3,[书,皮带,标签],300)
INSERT INTO T1 (NO,NAME,VALUE) VALUES (4,[皮带,提单],400)
INSERT INTO T1 (NO,NAME,VALUE) VALUES (5,[提单,标签,上衣],500)
INSERT INTO T1 (NO,NAME,VALUE) VALUES (6,[小册子],600)

CREATE CURSOR T2 (ORD N(8),NAME C(4),PRICE N(8))
INSERT INTO T2 VALUES (1,[上衣],10)
INSERT INTO T2 VALUES (2,[标签],20)
INSERT INTO T2 VALUES (3,[皮带],30)
INSERT INTO T2 VALUES (4,[书],40)
INSERT INTO T2 VALUES (5,[提单],50)
SELECT T1
SCAN
   LCSTR=[]
   FOR I=1 TO ALINES(A,ALLTRIM(NAME),[,])
       LCSTR=LCSTR+'"'+A(I)+'"'+IIF(I<ALINES(A,ALLTRIM(NAME),[,]),[,],[])
   ENDFOR
   SELECT MIN(PRICE) FROM T2 WHERE INLIST(NAME,&LCSTR) INTO ARRAY ATEMP
   REPLACE EXP1 WITH NVL(ATEMP(1)*T1.VALUE,0)
ENDSCAN
BLANK FIELDS EXP1 FOR EXP1=0 IN T1
BROWSE


[解决办法]
假设ORD唯一,tty 表1,tty1 表2
CLEAR ALL
SELECT a.*,NVL(b.ord,1) as neword,b.PRICE FROM tty a LEFT JOIN tty1 b ON AT(TRIM(b.nane),TRIM(a.nane))>0 INTO CURSOR dd
SELECT *,a.VALUE*PRICE as newp  FROM dd a WHERE NOT exists(SELECT 1 FROM dd where a.nane=nane AND a.neword>neword)

热点排行