【问题标题】:LEFT JOIN Excel VBA ADODB not working左连接 Excel VBA ADODB 不工作
【发布时间】:2018-03-14 19:04:37
【问题描述】:

我正在尝试将两个工作表中的数据合并到一个工作簿中。 我已成功地将数据查询到两个不同的记录集中,如下所示:

SELECT F1,F5,F12,F13,F37,F38 FROM [KAP$] WHERE F8 LIKE 'klima'

和

SELECT F1, F2, F3, F4, F5, F6, F7, F8 FROM [Klima$A3:H899] WHERE F1 IS NOT NULL

不幸的是,我还没有找到“合并”这两个记录集的方法。 但是我注意到,更好的归档方法是使用左连接一次查询两张表。但是我只是无法正确使用语法。我最后一次尝试是这样的:

SELECT
[KAP$].F1,
[KAP$].F5,
[KAP$].F12,
[KAP$].F13,
[KAP$].F37, 
[KAP$].F38,
[Klima$].F1,
[Klima$].F2,
[Klima$].F3,
[Klima$].F4, 
[Klima$].F5,
[Klima$].F6,
[Klima$].F7,
[Klima$].F8
FROM [KAP$] WHERE [KAP$].F8 LIKE 'Klima' LEFT JOIN [Klima$A3:H899] ON [KAP$].F1=[Klima$].F1

但正如我注意到的那样,它有不止一个问题......任何帮助都非常感谢,我一直在寻找合适的 excel vba adodb 指南几个小时没有成功......

谢谢!

编辑:这里是一些示例数据:

KAP:

ID1  Info1  Info2  KAPinfo1  KAPinfo2  KAPinfo3
ID2  Info1  Info2  KAPinfo1  KAPinfo2  KAPinfo3
ID3  Info1  Info2  KAPinfo1  KAPinfo2  KAPinfo3
ID4  Info1  Info2  KAPinfo1  KAPinfo2  KAPinfo3
ID5  Info1  Info2  KAPinfo1  KAPinfo2  KAPinfo3
ID6  Info1  Info2  KAPinfo1  KAPinfo2  KAPinfo3

气候:

ID1 Info1  Info2  Klima3  Klima4  Klima5  Klima6  Klima7  Klima8
ID2 Info1  Info2  Klima3  Klima4  Klima5  Klima6  Klima7  Klima8
ID3 Info1  Info2  Klima3  Klima4  Klima5  Klima6  Klima7  Klima8
ID6 Info1  -  -   Klima3  Klima4  Klima5  Klima6  Klima7  Klima8

合并后的表应如下所示:

ID1 Info1  Info2  Klima3  Klima4  Klima5  Klima6  Klima7  Klima8  KAPinfo1  KAPinfo2  KAPinfo3
ID2 Info1  Info2  Klima3  Klima4  Klima5  Klima6  Klima7  Klima8  KAPinfo1  KAPinfo2  KAPinfo3
ID3 Info1  Info2  Klima3  Klima4  Klima5  Klima6  Klima7  Klima8  KAPinfo1  KAPinfo2  KAPinfo3
ID4 Info1  Info2  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  KAPinfo1  KAPinfo2  KAPinfo3
ID5 Info1  Info2  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  KAPinfo1  KAPinfo2  KAPinfo3
ID6 Info1  Info2  Klima3  Klima4  Klima5  Klima6  Klima7  Klima8  KAPinfo1  KAPinfo2  KAPinfo3

基本上我想用左表 (KAP) 中的信息覆盖右表 (Klima) 中的 Info1 和 Info2 列,同时在右表 (Klima) 中保留额外的列

【问题讨论】:

  • 对于每个 F1,您需要在同一行或两(或更多)行上“合并”.?。添加适当的数据样本和预期结果

标签: sql vba excel join


【解决方案1】:

如果您需要左连接,则连接的 sintax 应该是:

SELECT
[KAP$].F1,
[KAP$].F5,
[KAP$].F12,
[KAP$].F13,
[KAP$].F37, 
[KAP$].F38,
[Klima$A3:H899].F1,
[Klima$A3:H899].F2,
[Klima$A3:H899].F3,
[Klima$A3:H899].F4, 
[Klima$A3:H899].F5,
[Klima$A3:H899].F6,
[Klima$A3:H899].F7,
[Klima$A3:H899].F8
FROM [KAP$]
LEFT JOIN [Klima$A3:H899]   ON ([KAP$].F1=[Klima$A3:H899].F1)
WHERE   [KAP$].F8 LIKE 'Klima%' 

假设 [Klima$A3:H899] 是一个有效的表格或等效表格

【讨论】:

  • 不幸的是无法正常工作,“JOIN 操作中的语法错误”#-2147217900
  • 现在有一个不同的错误(相同的错误代码)“不支持连接表达式”我尝试了括号但没有运气。这太令人沮丧了,谢谢你的帮助!
  • 现在错误是数据类型不匹配知道吗?非常感谢!
  • asnwer 更新了..但请确保您正在兼容相同的数据类型
  • 返回“JOIN-Operation 中的语法错误”,这太愚蠢了,我的问题有不同的方法吗?我必须使用 Excel...谢谢!
【解决方案2】:

试试这个查询:

SELECT [KAP$].F1,
       [KAP$].F5,
       [KAP$].F12,
       [KAP$].F13,
       [KAP$].F37, 
       [KAP$].F38,
       [Klima$].F1,
       [Klima$].F2,
       [Klima$].F3,
       [Klima$].F4, 
       [Klima$].F5,
       [Klima$].F6,
       [Klima$].F7,
       [Klima$].F8
FROM
    (SELECT F1,F5,F12,F13,F37,F38 FROM [KAP$] WHERE F8 LIKE 'klima') AS [KAP$]
LEFT JOIN
    (SELECT F1, F2, F3, F4, F5, F6, F7, F8 FROM [Klima$A3:H899] WHERE F1 IS NOT NULL) AS [Klima$]
ON [KAP$].F1 = [Klima$].F1

【讨论】:

  • excel 给我一个数据类型不匹配的错误 :( 谢谢你的帮助!
  • @l.wach 尝试编辑的答案。另外,如果不起作用,请尝试将'klima' 更改为'%klima%'。
  • @l.wach 确保两个 F1 列的数据类型相同。
猜你喜欢
  • 2021-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-06
  • 1970-01-01
  • 2020-11-27
  • 2021-07-01
  • 2013-03-01
相关资源
最近更新 更多