我正在访问并利用VBA进行查询,因为我有变量名,所以我无法在访问中使用查询向导
我有以下2个表格:
tblKabelInfo
一个名称因程序中的其他内容而异的表格
tblName1 as String
表格如下:
tblKabelInfo:
+--------------+----------+----------+----------+
| Kabelnummer | data |more data |even more |
+--------------+----------+----------+----------+
| 1 | x | x | x |
+--------------+----------+----------+----------+
| 2 | x | x | x |
+--------------+----------+----------+----------+
| 3 | x | x | x |
+--------------+----------+----------+----------+
| 4 | x | x | x |
+--------------+----------+----------+----------+
tblName1:
+--------------------------------+----------+----------+
| Filename | bla | databla |
+--------------------------------+---------------------+
|\850\850nm_Lessenaar 1_0001.SOR | x | x |
+--------------------------------+----------+----------+
|\850\850nm_Lessenaar 1_0002.SOR | x | x |
+--------------------------------+----------+----------+
|\850\850nm_Lessenaar 1_0003.SOR | x | x |
+--------------------------------+----------+----------+
|\850\850nm_Lessenaar 1_0004.SOR | x | x |
+--------------------------------+----------+----------+
我知道两个表的大小相同(所以如果表“tblName1”上升到0234.SOR,我知道来自“tblKabelInfo”的Kabelnummer也会上升到234)
我想创建一个查询,使新表看起来像这样:
NewTable:
+--------------------------------+--------------+-----+--------+-----------+---------+
| Filename |KabelNummer | bla |databla | More Data |Even more|
+--------------------------------+--------------+--------------+-----------+---------+
|\850\850nm_Lessenaar 1_0001.SOR | 1 | x | x | x | x |
+--------------------------------+--------------+-----+--------+-----------+---------+
|\850\850nm_Lessenaar 1_0002.SOR | 2 | x | x | x | x |
+--------------------------------+--------------+-----+--------+-----------+---------+
|\850\850nm_Lessenaar 1_0003.SOR | 3 | x | x | x | x |
+--------------------------------+--------------+-----+--------+-----------+---------+
|\850\850nm_Lessenaar 1_0004.SOR | 4 | x | x | x | x |
+--------------------------------+--------------+-----+--------+-----------+---------+
我想在1个表中有2个表,并且共同的因素是“Filename”的结尾应该与“KabelNummer”相同
答案 0 :(得分:1)
试试这个
INSERT INTO tableNew
SELECT B.Filename,
A.Kabelnummer,
B.bla,
B.databla,
A.data,
A.[more data],
A.[even more]
FROM tblKabelInfo A INNER JOIN tblName1 B
ON A.Kabelnummer=CAST(RIGHT(SUBSTRING( B.Filename,1,LEN(SUBSTRING( B.Filename, 0, PATINDEX('%.%', B.Filename)) + '.') - 1),4)
更新以处理文件名中的4位数字。 0001
至9999
您的查询(编辑)
INSERT INTO tableNew
SELECT B.[Filename],
A.[Vezelnummer],
B.[tblVerlies1_Verlies],
B.[tblVerlies2_Verlies],
A.[KabelNaam],
A.[Van],
A.[Naar],
A.[VezelLengte],
A.[TypeKabel],
A.[TypeConnector],
A.[AantalConnectoren],
A.[AantalLassen]
FROM tblKabelInfo A INNER JOIN tbl_GL_850 B
ON A.Vezelnummer=CAST(RIGHT(SUBSTRING(B.[Filename],1,LEN(SUBSTRING(B.[Filename], 0, PATINDEX('%.%',B.[Filename])) + '.') - 1),4) AS INT)
答案 1 :(得分:1)
SELECT t.Filename,T.bla,T.databla,K.MoreData,K.EvenMore
INTO
[New Table Name]
FROM tblName1 as T
inner join tblKabelInfo as K
ON CAST(SUBSTRING(T.Filename,[length of filename upto number],1)AS INT)= K.KabelNummer;
没有经过测试但是会有这些内容,我建议您select into
查看here。
答案 2 :(得分:1)
此处的基本挑战似乎是识别tblName1.Filename
中的数字,然后可以使用这些数字与tblKabelInfo.Kabelnummer
结合。
如果这些数字始终是字符串最后8个字符中的前4个,则可以使用与Access SQL兼容的Right
和Left
来轻松获取它们。
这是立即窗口中的会话。
Filename = "\850\850nm_Lessenaar 1_0001.SOR"
? Right(Filename, 8)
0001.SOR
? Left(Right(Filename, 8), 4)
0001
如果您需要将这些字符转换为数字值,可以使用Val
函数。
? Val(Left(Right(Filename, 8), 4))
1
但是,如果Filename
值变量更大,并不总是以句点和3个字符结尾,则任务将更具挑战性。
Filename = "\850\850nm_Lessenaar 1_0001.ABCDEF"
? InstrRev(Filename, "_")
23
? InstrRev(Filename, ".")
28
? Mid(Filename, InstrRev(Filename, "_") + 1, _
(InstrRev(Filename, ".") - InstrRev(Filename, "_")) - 1)
0001
? Val(Mid(Filename, InstrRev(Filename, "_") + 1, _
(InstrRev(Filename, ".") - InstrRev(Filename, "_")) - 1))
1
一旦您计算出适当的功能组合以获得所需功能,您就可以在Access查询中使用它们。这是使用这两种方法的查询。它使用 tblName1 中的示例数据在Access 2007中无错误地运行。
SELECT
t.Filename,
Val(Left(Right(Filename, 8), 4)) AS Kabelnummer1,
Val(
Mid(
Filename,
InstrRev(Filename, "_") + 1,
(InstrRev(Filename, ".") - InstrRev(Filename, "_")) - 1
)
) AS Kabelnummer2
FROM tblName1 AS t;