我正在尝试将外部源和另一张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公式。但填写表格后,不会自动计算公式。
答案 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查询开头的重要性。没有它就行不通!
一旦您有了此查询,您只需使用菜单Data
►Get External Data
►From SQL Server
将其粘贴到Excel中即可。在第一步中,您将获得customer表,然后在第二步中细化查询以包括如上所述的表变量。这是一个简短的视觉摘要:
我想,此时唯一剩下的问题是:
要动态创建上述SQL,您可能需要查看以下内容:Using an array or dictionary as from clause in sql in excel vba
就在昨天,我回答了一个类似的问题,用户希望将Excel工作表的内容作为动态创建的表传递给SQL Server。您可以轻松地适应(甚至按原样使用)。
对于最后一步(使用这个新的SQL查询在Excel中更新此表),您可以使用宏录制器并执行我在上面的屏幕截图中所做的操作。自动创建的代码只不过是我建议给你的。
所以,你有它。如果我不够清楚,或者您需要进一步的细节来理解这个解决方案,请告诉我。