跪求高手解答 sqlite3 在一列插入从0到n的数字
本帖最后由 huyidao88116 于 2013-05-12 22:03:26 编辑 根据表1,2,3的内容,插入表4
1.物理扫描链链路信息表PhysicalBSChain
ID链编号网表中BS器件名网表中BS器件封装名器件在网表中的顺序(从TDI到TDO编号) 链上BS器件数
1 1 U1 JT_PACKAGE 1 2
2 1 U2 JT_PACKAGE 2 2
3 2 U3 JT_PACKAGE 1 2
4 2 U4 JT_PACKAGE 2 2
2.BSDL器件名与封装匹配信息表BSDL_DeviceNamePackageMatched
IDBSDL文件中器件名网表中器件名BSDL器件类型ID
BSDL中封装名网表中封装名
1 sn74bct8244a U1 1 JT_PACKAGE JT_PACKAGE
2 sn74bct8244a U2 1 JT_PACKAGE JT_PACKAGE
3.BSDL器件类型表 BSDLDeviceType
BSDL器件类型IDBSDL器件类型名BSDL文件名BSC个数BS指令长度TCK最高时钟
1 sn74bct8244a sn74bct8244a.bsd 9 8 50.00e6
2 sn74bct8245a_ab sn74bct8245a_ab.bsd 9 8 10.00e6
1.根据表1中的链编号按器件在网表中的顺序找出网表中的BS器件名
(如表1当链编号=1时获得的是U1 U2,当链编号=2时获得的是U3 U4)
2.再根据得到的网表中的BS器件名,对应表2中的网表中的器件名,找到BSDL器件类型ID(如查链1按照器件在网表中的顺序的所有的网表中的BS器件的BSDL器件类型ID得到U1的BSDL器件类型ID=1和U2的BSDL器件类型ID=1)
3.再根据得到的BSDL器件类型ID,对应表3中的BSDL器件类型ID,获取相应的各器件的BSC个数(如BSDL器件类型ID=1时获得个数为36)
根据以上获得的结果插表4:
首先,插入的是链1,在链路号这一列插入18个1;在器件名这一列先插入9个U1后再插入9个U2;在器件在链路中序号这一列先插入9个1后再插入9个2;在Cell在链路中序号这一列插入数值0~17(因为U1+U2的BSC个数=9+9=18);在器件中Cell对应的num这一列插入0~8,0~8。
再次,插入链2,同链1一样操作。
结果举例:
工作链路CELL信息表TestingLinkCellInfo
ID链路号器件名器件在链路中序号Cell在链路中序号器件中Cell对应的num
11U1100
21U1111
31U1122
41U1133
51U1144
61U1155
71U1166
81U1177
91U1188
101U2290
111U22101
121U22112
131U22123
141U22134
151U22145
161U22156
171U22167
181U22178
192U3100
202U3111
212U3122
222U3133
232U3144
242U3155
252U3166
262U3177
272U4280
282U4291
292U42102
302U42113
312U42124
求高手解答,谢谢大家! SQLite3
[解决办法]
create table PhysicalBSChain (ID integer primary key,[链编号] int,[网表中BS器件名] varchar(20),[网表中BS器件封装名] varchar(20),[器件在网表中的顺序(从TDI到TDO编号)] int,[链上BS器件数] int);
insert into PhysicalBSChain
select 1, 1 ,'U1', 'JT_PACKAGE', 1, 2
union all select 2, 1 ,'U2', 'JT_PACKAGE', 2, 2
union all select 3, 2 ,'U3','JT_PACKAGE', 1, 2
union all select 4, 2 ,'U4', 'JT_PACKAGE', 2, 2
CREATE TABLE BSDL_DeviceNamePackageMatched(ID INT,[BSDL文件中器件名] VARCHAR(20),[网表中器件名] VARCHAR(20),[BSDL器件类型ID] INT,[BSDL中封装名] VARCHAR(20),[网表中封装名] VARCHAR(20));
INSERT INTO BSDL_DeviceNamePackageMatched SELECT 1 ,'sn74bct8244a', 'U1', 1 ,'JT_PACKAGE', 'JT_PACKAGE'
UNION ALL SELECT 2 ,'sn74bct8244a' ,'U2', 1 ,'JT_PACKAGE' ,'JT_PACKAGE'
CREATE TABLE BSDLDeviceType([BSDL器件类型ID] INT,[BSDL器件类型名] VARCHAR(20),[BSDL文件名] VARCHAR(30),[BSC个数] INT, [BS指令长度] INT,[TCK最高时钟] VARCHAR(20));
INSERT INTO BSDLDeviceType SELECT 1 ,'sn74bct8244a','sn74bct8244a.bsd', 9, 8, '50.00e6'
UNION ALL SELECT 2 ,'sn74bct8245a_ab' ,'sn74bct8245a_ab.bsd', 9, 8 ,'10.00e6'
CREATE TABLE TMP(ID INTEGER PRIMARY KEY);
INSERT INTO TMP SELECT 1
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4
CREATE TABLE TMP1(ID INTEGER PRIMARY KEY,ID1 INT);
INSERT INTO TMP1(ID,ID1) SELECT NULL,1 FROM TMP,TMP,TMP,TMP
DELETE FROM TMP1 WHERE ID>(SELECT MAX([BSC个数]) FROM BSDLDeviceType)
SELECT AA.[链编号],AA.[网表中BS器件名],AA.[器件在网表中的顺序(从TDI到TDO编号)], [BSC个数] FROM
(
SELECT AA.[链编号],AA.[网表中BS器件名],AA.[器件在网表中的顺序(从TDI到TDO编号)],CC.[BSC个数] FROM
PhysicalBSChain AS AA INNER JOIN BSDL_DeviceNamePackageMatched AS BB ON AA.[网表中BS器件名]=BB.[网表中器件名]
INNER JOIN BSDLDeviceType AS CC ON BB.[BSDL器件类型ID]=CC.[BSDL器件类型ID]
) AS AA,TMP1 AS BB
WHERE BB.ID<=AA.[BSC个数]
create table PhysicalBSChain (ID integer primary key,[链编号] int,[网表中BS器件名] varchar(20),[网表中BS器件封装名] varchar(20),[器件在网表中的顺序(从TDI到TDO编号)] int,[链上BS器件数] int);
insert into PhysicalBSChain
select 1, 1 ,'U1', 'JT_PACKAGE', 1, 2
union all select 2, 1 ,'U2', 'JT_PACKAGE', 2, 2
union all select 3, 2 ,'U3','JT_PACKAGE', 1, 2
union all select 4, 2 ,'U4', 'JT_PACKAGE', 2, 2
CREATE TABLE BSDL_DeviceNamePackageMatched(ID INT,[BSDL文件中器件名] VARCHAR(20),[网表中器件名] VARCHAR(20),[BSDL器件类型ID] INT,[BSDL中封装名] VARCHAR(20),[网表中封装名] VARCHAR(20));
INSERT INTO BSDL_DeviceNamePackageMatched SELECT 1 ,'sn74bct8244a', 'U1', 1 ,'JT_PACKAGE', 'JT_PACKAGE'
UNION ALL SELECT 2 ,'sn74bct8244a' ,'U2', 1 ,'JT_PACKAGE' ,'JT_PACKAGE'
CREATE TABLE BSDLDeviceType([BSDL器件类型ID] INT,[BSDL器件类型名] VARCHAR(20),[BSDL文件名] VARCHAR(30),[BSC个数] INT, [BS指令长度] INT,[TCK最高时钟] VARCHAR(20));
INSERT INTO BSDLDeviceType SELECT 1 ,'sn74bct8244a','sn74bct8244a.bsd', 9, 8, '50.00e6'
UNION ALL SELECT 2 ,'sn74bct8245a_ab' ,'sn74bct8245a_ab.bsd', 9, 8 ,'10.00e6'
CREATE TABLE TMP(ID INTEGER PRIMARY KEY);
INSERT INTO TMP SELECT 1
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4
CREATE TABLE TMP1(ID INTEGER PRIMARY KEY,ID1 INT);
INSERT INTO TMP1(ID,ID1) SELECT NULL,1 FROM TMP,TMP,TMP,TMP
DELETE FROM TMP1 WHERE ID>(SELECT MAX([BSC个数]) FROM BSDLDeviceType)
CREATE TABLE TMP2(ID INTEGER PRIMARY KEY, L int,Name varchar(20),Code int);
INSERT INTO TMP2(L,Name,Code)
SELECT AA.[链编号],AA.[网表中BS器件名],AA.[器件在网表中的顺序(从TDI到TDO编号)] FROM
(
SELECT AA.[链编号],AA.[网表中BS器件名],AA.[器件在网表中的顺序(从TDI到TDO编号)],CC.[BSC个数] FROM
PhysicalBSChain AS AA INNER JOIN BSDL_DeviceNamePackageMatched AS BB ON AA.[网表中BS器件名]=BB.[网表中器件名]
INNER JOIN BSDLDeviceType AS CC ON BB.[BSDL器件类型ID]=CC.[BSDL器件类型ID]
) AS AA,TMP1 AS BB
WHERE BB.ID<=AA.[BSC个数] ;
SELECT *,
(SELECT COUNT(1) FROM TMP2 WHERE L=A.L AND ID<A.ID) CellO,
(SELECT COUNT(1) FROM TMP2 WHERE L=A.L AND Code=A.Code AND ID<A.ID) CellN
FROM TMP2 AS A;