MS Excel – 使用本地表(表)连接外部(SQL)数据

我试图从外部来源和我的Excel文件的另一张表中的数据到一个表。 我在SQL Server中有什么是我的客户的表格: ╔════╦══════╦═════════╗ ║ ID ║ Name ║ Country ║ ╠════╬══════╬═════════╣ ║ 1 ║ Joe ║ Spain ║ ║ 2 ║ Bob ║ Frence ║ ║ 3 ║ Eva ║ Spain ║ ╚════╩══════╩═════════╝ ╔═════════╦═════╗ ║ Country ║ VAT ║ ╠═════════╬═════╣ ║ Germany ║ 19% ║ ║ Frence ║ 20% ║ ║ Spain ║ 21% ║ ╚═════════╩═════╝我最终需要的是一个包含我的客户和他应该支付的税金的表格。 该表应该在我的Excel文档中的一张,用户应该能够根据需要轻松更新。 ╔══════════╦═════╗ ║ Customer ║ VAT ║ ╠══════════╬═════╣ ║ Joe ║ 21% ║ ║ Bob ║ 20% ║ ║ Eva ║ 21% ║ ╚══════════╩═════╝ what what what what ╔══════════╦═════╗ ║ Customer ║ VAT ║ ╠══════════╬═════╣ ║ Joe ║ 21% ║ ║ Bob ║ 20% ║ ║ Eva ║ 21% ║ ╚══════════╩═════╝

我尝试了两个Excel的SQL查询 – 一个从SQL Server和第二个“从微软查询”(从Excel文件)。 但由于后续无法运行,我无法确定一次更新后的数据是否正确。

我也尝试了一个SQL查询(从SQL Server)和一个VLOOKUP公式。 但是表格填充后,公式不会自动计算。

我上面的评论只是为了打开一些你可能有的可能性。

PowerQuery是Office 2013的免费插件。在Office 2016中,它是Excel的一部分,不再是插件。

无论如何,你似乎更喜欢在SQL上使用临时表或表variables的方法。 因此,我会详细介绍一下这个方法:

最后你会想要一个类似于这个的查询:

 set nocount on; declare @tblVAT table ( Country nvarchar(50), VAT decimal(9, 7) ); insert into @tblVAT (Country, VAT) values (N'Germany', 0.19), (N'Frence', 0.20), (N'Spain', 0.21); select tc.Name, tc.ID, case when tc.Country is null then tv.Country else tc.Country end as Country, tv.VAT from dbo.tblCustomers as tc full outer join @tblVAT as tv on tv.Country = tc.Country; 

注意set nocount on;的重要性set nocount on; 在上面的SQL查询的开始。 没有它,它不会工作!

一旦您有了这个查询,您可以使用菜单DataGet External DataFrom SQL Server将其粘贴到Excel中。 在第一步中,您将获得客户表,然后在第二步中完善查询以包含上面描述的表variables。 这是一个简短的视觉总结:

在这里输入图像说明

我想,在这一点上剩下的唯一问题是:

  1. 你如何dynamic地创build上面的SQL语句和
  2. 你如何获得Excel中的上述表,然后更新这个更新的SQL语句。

要dynamic地创build上面的SQL,你可能需要看看下面的内容: 在sql中使用数组或字典作为from子句在excel vba

就在昨天,我回答了一个类似的问题,用户想将Excel表格的内容作为dynamic创build的表格传递给SQL Server。 你可以很容易地适应(甚至是用它)来达到你的目的。

对于最后一步(使用这个新的SQL查询在Excel中更新这个表),你可以使用macroslogging器,并做我在上面的屏幕截图所做的。 自动创build的代码只不过是我build议给你的。

所以你有它。 让我知道如果我不够清楚,或者如果你需要更多的细节来理解这个解决scheme。