(紧急)如何拆分以下数据,在线等
要将以下数据“位号”进行拆分
数据库为
物资名称 型号 数量 位号
电阻 A1 5 q1,q2,q3,q4,q5
电阻 A2 1 w1
电阻 A3 6 e1,e2,e3,e4,e5,e6
拆分后的正确数据为
物资名称 型号 数量 位号
电阻 A1 5 q1
电阻 A1 5 q2
电阻 A1 5 q3
电阻 A1 5 q4
电阻 A1 5 q5
电阻 A2 1 w1
电阻 A3 6 e1
电阻 A3 6 e2
电阻 A3 6 e3
电阻 A3 6 e4
电阻 A3 6 e5
电阻 A3 6 e6
[解决办法]
CREATE CURSOR T (物资名称 C(4),型号 C(2),数量 N(2),位号 C(2))
SELECT AB &&原表
SCAN
FOR I=1 TO ALINES(AA,ALLTRIM(位号),[,])
INSERT INTO T VALUES (AB.物资名称,AB.型号,AB.数量,AA[I])
ENDFOR
ENDSCAN
SELECT T
BROWSE
[解决办法]
通常在这种应用中,被聚集的项目(比如你的位号)都有一个表用于存储相关的信息
所以可以这样写
CREATE CURSOR 位号表 ( 位号 C(2) )
INSERT INTO 位号表 VALUES ('q1')
INSERT INTO 位号表 VALUES ('q2')
INSERT INTO 位号表 VALUES ('q3')
INSERT INTO 位号表 VALUES ('q4')
INSERT INTO 位号表 VALUES ('q5')
INSERT INTO 位号表 VALUES ('q6')
INSERT INTO 位号表 VALUES ('e1')
INSERT INTO 位号表 VALUES ('e2')
INSERT INTO 位号表 VALUES ('e3')
INSERT INTO 位号表 VALUES ('e4')
INSERT INTO 位号表 VALUES ('e5')
INSERT INTO 位号表 VALUES ('e6')
INSERT INTO 位号表 VALUES ('w1')
INSERT INTO 位号表 VALUES ('w2')
CREATE CURSOR 数据表 ( 物资名称 C(10), 型号 C(10), 数量 N(2,0), 位号 C(50) )
INSERT INTO 数据表 VALUES ('电阻', 'A1', 5, 'q1,q2,q3,q4,q5')
INSERT INTO 数据表 VALUES ('电阻', 'A2', 1, 'w1')
INSERT INTO 数据表 VALUES ('电阻 ', 'A3', 6, 'e1,e2,e3,e4,e5,e6')
SELECT a.物资名称, a.型号, a.数量, b.位号 from 数据表 a, 位号表 b where find_in_set(b.位号, a.位号) > 0
FUNCTION find_in_set(v, s)
PRIVATE ALL
ALINES(a, s, ',')
RETURN ASCAN(a, v)
Close Databases All
Create Cursor 原表 (物资名称 C(10),型号 C(10),数量 I,位号 C(50))
Insert Into 原表 (物资名称,型号,数量,位号) Values ('电阻','A1',5,'q1,q2,q3,q4,q5')
Insert Into 原表 (物资名称,型号,数量,位号) Values ('电阻','A2',1,'w1')
Insert Into 原表 (物资名称,型号,数量,位号) Values ('电阻','A3',6,'e1,e2,e3,e4,e5,e6')
Browse&& 原表数据'
Select * Into Table 结果表 From 原表 Where 1=0
Select 原表
Scan
lnArrayRowNum=Alines(aArray,Strtran(原表.位号,',',Chr(13)))
For lnI=1 To lnArrayRowNum
Insert Into 结果表 (物资名称,型号,数量,位号) Values (原表.物资名称,原表.型号,原表.数量,aArray(lnI))
Endfor
Endscan
Select 结果表
Browse
CREATE CURSOR lsb (bh n(4))
FOR I=1 TO 10
INSERT INTO LSB VALUES (I)
ENDFOR
Create Cursor 原表 (物资名称 C(10),型号 C(10),数量 I,位号 C(50))
Insert Into 原表 (物资名称,型号,数量,位号) Values ('电阻','A1',5,'q1,q2,q3,q4,q5')
Insert Into 原表 (物资名称,型号,数量,位号) Values ('电阻','A2',1,'w1')
Insert Into 原表 (物资名称,型号,数量,位号) Values ('电阻','A3',6,'e1,e2,e3,e4,e5,e6')
*Browse && 原表数据'
SELECT 物资名称,型号,数量,WH 位号 FROM (SELECT a.*,b.bh,STREXTRACT(','+a.位号+',',',',',',b.bh)+SPACE(33) WH FROM 原表 a inner JOIN lsb b ON LEN(ALLTRIM(a.位号))>=b.bh) A WHERE NOT EMPTY(WH)