sql >> Databasteknik >  >> RDS >> Sqlserver

MS Excel - sammanfoga externa (SQL) data med lokal tabell (ark)

Min kommentar ovan var bara avsedd att öppna några möjligheter som du kan ha till hands.

PowerQuery är ett gratis plug-in för Office 2013. I Office 2016 är det en del av Excel och inte längre ett plug-in.

Hur som helst, du verkar föredra metoden att använda en temporär tabell eller en tabellvariabel på din SQL. Därför kommer jag att utveckla lite mer om detta tillvägagångssätt:

Till slut vill du ha en fråga som liknar denna:

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;

Observera vikten av att set nocount on; i början av ovanstående SQL-fråga. Utan det fungerar det inte!

När du väl har fått den här frågan kan du helt enkelt klistra in den i Excel med menyn DataGet External DataFrom SQL Server . I ett första steg kommer du att få fram kundtabellen och sedan i ett andra steg förfina frågan till att inkludera tabellvariabeln enligt beskrivningen ovan. Här är en kort visuell sammanfattning:

Jag antar att vid det här laget är de enda återstående frågorna:

  1. Hur skapar du dynamiskt ovanstående SQL-sats och
  2. hur får du ovanstående tabell i Excel och sedan uppdaterad med denna uppdaterade SQL-sats.

För att dynamiskt skapa ovanstående SQL kanske du vill ta en titt på följande:Använda en array eller ordbok från sats i sql i excel vba

Igår svarade jag på en liknande fråga där en användare ville skicka innehållet i ett Excel-ark som en dynamiskt skapad tabell till en SQL Server. Du kan enkelt anpassa (eller till och med använda den som den är) för ditt ändamål.

För det sista steget (uppdatera den här tabellen i Excel med den här nya SQL-frågan) kan du använda makroinspelaren och göra det jag gjorde i skärmdumpen ovan. Den automatiskt skapade koden är inget mer / mindre än vad jag skulle föreslå dig.

Så där har du det. Låt mig veta om jag inte var tillräckligt tydlig eller om du behöver mer information för att förstå den här lösningen.




  1. Topp 7 jobb som kräver SQL

  2. Bästa sättet att lagra span i tid i en MySQL-databas?

  3. 2 funktioner som returnerar sekunderna från ett Datetime-värde i Oracle

  4. Välja en slumpmässig rad i Oracle