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

时间:2016-06-17 07:45:22

标签: sql-server excel

我正在尝试将外部源和另一张excel文件中的数据放入一个表中。 我在SQL Server中拥有的是我的客户表: ╔════╦══════╦═════════╗ ║ ID ║ Name ║ Country ║ ╠════╬══════╬═════════╣ ║ 1 ║ Joe ║ Spain ║ ║ 2 ║ Bob ║ Frence ║ ║ 3 ║ Eva ║ Spain ║ ╚════╩══════╩═════════╝ 我在另一张excel文件中的内容是国家和税收清单: ╔═════════╦═════╗ ║ Country ║ VAT ║ ╠═════════╬═════╣ ║ Germany ║ 19% ║ ║ Frence ║ 20% ║ ║ Spain ║ 21% ║ ╚═════════╩═════╝ 我最终需要的是一张包含我的客户和他应该支付的税款的表格。该表应该在我的Excel文档的一张表中,用户应该能够根据需要轻松更新它。 ╔══════════╦═════╗ ║ Customer ║ VAT ║ ╠══════════╬═════╣ ║ Joe ║ 21% ║ ║ Bob ║ 20% ║ ║ Eva ║ 21% ║ ╚══════════╩═════╝ 知道什么是一个很好的简单解决方案吗?

我尝试了两个excel sql查询 - 一个来自SQL Server,第二个来自“microsoft query”(来自excel文件)。但由于我不能随后运行它们,我无法确保一次更新后的数据是否正确。

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

1 个答案:

答案 0 :(得分:3)

我上面的评论仅仅是为了打开你可能掌握的一些可能性。

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

无论如何,您似乎更喜欢在SQL上使用临时表或表变量的方法。因此,我将详细介绍这种方法:

最后,您需要一个与此类似的查询:

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;在上述SQL查询开头的重要性。没有它就行不通!

一旦您有了此查询,您只需使用菜单DataGet External DataFrom SQL Server将其粘贴到Excel中即可。在第一步中,您将获得customer表,然后在第二步中细化查询以包括如上所述的表变量。这是一个简短的视觉摘要:

enter image description here

我想,此时唯一剩下的问题是:

  1. 如何动态创建上述SQL语句和
  2. 如何在Excel中获取上表,然后使用此更新的SQL语句进行更新。
  3. 要动态创建上述SQL,您可能需要查看以下内容:Using an array or dictionary as from clause in sql in excel vba

    就在昨天,我回答了一个类似的问题,用户希望将Excel工作表的内容作为动态创建的表传递给SQL Server。您可以轻松地适应(甚至按原样使用)。

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

    所以,你有它。如果我不够清楚,或者您需要进一步的细节来理解这个解决方案,请告诉我。