Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

MS Excel - joindre des données externes (SQL) avec une table locale (feuille)

Mon commentaire ci-dessus visait simplement à ouvrir quelques possibilités que vous pourriez avoir sous la main.

PowerQuery est un plug-in gratuit pour Office 2013. Dans Office 2016, il fait partie d'Excel et n'est plus un plug-in.

Quoi qu'il en soit, vous semblez préférer l'approche consistant à utiliser une table temporaire ou une variable de table sur votre SQL. Par conséquent, je vais développer un peu plus cette approche :

Au final, vous voudrez une requête similaire à celle-ci :

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;

Notez l'importance de set nocount on; au début de la requête SQL ci-dessus. Sans cela, cela ne fonctionnera pas !

Une fois que vous avez cette requête, vous pouvez simplement la coller dans Excel en utilisant le menu DataGet External DataFrom SQL Server . Dans une première étape, vous obtiendrez la table des clients, puis dans une deuxième étape, vous affinerez la requête pour inclure la variable de table comme décrit ci-dessus. Voici un petit résumé visuel :

Je suppose qu'à ce stade, les seules questions restantes sont :

  1. Comment créer dynamiquement l'instruction SQL ci-dessus et
  2. comment obtenez-vous le tableau ci-dessus dans Excel puis mis à jour avec cette instruction SQL mise à jour.

Pour créer dynamiquement le SQL ci-dessus, vous pouvez consulter ce qui suit :Utilisation d'un tableau ou d'un dictionnaire comme clause from dans sql dans excel vba

Pas plus tard qu'hier, j'ai répondu à une question similaire dans laquelle un utilisateur souhaitait transmettre le contenu d'une feuille Excel en tant que tableau créé dynamiquement à un serveur SQL. Vous pouvez facilement l'adapter (ou même l'utiliser tel quel) à votre objectif.

Pour la dernière étape (mettre à jour ce tableau dans Excel avec cette nouvelle requête SQL), vous pouvez utiliser l'enregistreur de macros et faire ce que j'ai fait dans la capture d'écran ci-dessus. Le code créé automatiquement n'est ni plus ni moins que ce que je vous proposerais.

Donc, voilà. Faites-moi savoir si je n'ai pas été assez clair ou si vous avez besoin de plus de détails pour comprendre cette solution.