Mijn opmerking hierboven was alleen bedoeld om een paar mogelijkheden te openen die je misschien bij de hand hebt.
PowerQuery is een gratis plug-in voor Office 2013. In Office 2016 maakt het deel uit van Excel en niet langer een plug-in.
Hoe dan ook, je lijkt de voorkeur te geven aan de benadering om een tijdelijke tabel of een tabelvariabele in je SQL te gebruiken. Daarom zal ik wat meer ingaan op deze benadering:
Uiteindelijk wil je een zoekopdracht die lijkt op deze:
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;
Let op het belang van set nocount on;
aan het begin van de bovenstaande SQL-query. Zonder dat zal het niet werken!
Als u deze query eenmaal heeft, kunt u deze eenvoudig in Excel plakken met behulp van het menu Data
► Get External Data
► From SQL Server
. In een eerste stap krijgt u de klantentabel en in een tweede stap verfijnt u de query om de tabelvariabele op te nemen zoals hierboven beschreven. Hier is een korte visuele samenvatting:
Ik denk dat op dit moment de enige resterende vragen zijn:
- Hoe maak je dynamisch de bovenstaande SQL-instructie en
- hoe krijg je de bovenstaande tabel in Excel en vervolgens bijgewerkt met deze bijgewerkte SQL-instructie.
Als u de bovenstaande SQL dynamisch wilt maken, kunt u het volgende bekijken:Een array of woordenboek gebruiken vanaf-clausule in sql in Excel vba
Gisteren nog beantwoordde ik een soortgelijke vraag waarbij een gebruiker de inhoud van een Excel-blad als een dynamisch gemaakte tabel wilde doorgeven aan een SQL Server. U kunt het gemakkelijk aanpassen (of zelfs gebruiken zoals het is) voor uw doel.
Voor de laatste stap (update deze tabel in Excel met deze nieuwe SQL-query) kun je de macrorecorder gebruiken en doen wat ik deed in de bovenstaande schermafbeelding. De automatisch aangemaakte code is niets meer/minder dan wat ik je zou voorstellen.
Dus daar heb je het. Laat het me weten als ik niet duidelijk genoeg was of als je meer details nodig hebt om deze oplossing te begrijpen.