Avatar billede balk Nybegynder
01. november 2007 - 12:06 Der er 2 kommentarer og
1 løsning

Saml flere SQL'er i én

Jeg har en database som indeholder en mængde tabeller. I denne problemstilling benytter jeg kun data fra tre af tabellerne: Vagtplan, Mødeservice og Medarbejder.
Mit ønske er at få en effektivitetsmåling over hvor mange møder en mængde konsulenter booker (data fra Mødeservice) på den mængde timer de er på arbejder (data fra Vagtplan)
Det er ikke et problem når jeg bruger flere forespørgsler i Access, men jeg vil gerne kunne samle det hele i én SQL-sætning så jeg kan trække resultaterne ud i et HTML-interface via et VB-script.

Jeg benytter i princippet 4 SQLs dog har jeg trukket dem sammen i to indlejrede forespørgsler som jeg så kan samle og lave min beregning i en 3. forespørgsel. Mit spørgsmål er, kan følgende 3 forespørgsler skrives sammen til én?

Til info: Vagtplan.Initialer og Mødeservice.Konsulent er sammenkædet, så hvis man skal joine Vagtplan med Mødeservice kan det gøres på: Vagtplan INNER JOIN Mødeservice ON Mødeservice.Konsulent=Vagtplan.Initialer;

Følgende forespørgsel(er) trækker data fra tabellen ”Vagtplan” for at finde timesummen på aktiviteten ”Mødebooking”:
Forespørgslens navn: ”Timesum”
SELECT Initialer, Sum(Timesum) AS [Sum af Timesum]
FROM [SELECT Vagtplan.Initialer, Vagtplan.Team, Vagtplan.[Aktivitet-navn], Vagtplan.[Vagt dato], Vagtplan.[Vagt start], Vagtplan.[Vagt slut], Vagtplan.Pause, ([vagt slut]-[vagt start]-[pause])*24 AS Timesum
FROM Vagtplan INNER JOIN Medarbejder ON Vagtplan.Initialer = Medarbejder.Initialer
WHERE Vagtplan.[Aktivitet-navn]=1 AND Vagtplan.[Vagt dato] Between Date()-14 And Date()]. AS [%$##@_Alias]
GROUP BY Initialer;

Følgende forespørgsel(er) trækker data fra tabellen ”Mødeservice” for at finde summen af bookede møder fordelt per initialsæt:
Forespørgslens navn: ”Antal møder”
SELECT Konsulent, Sum([Antal møder]) AS [Sum af Antal møder]
FROM [SELECT Mødeservice.[Booket dato], Mødeservice.Konsulent, Count(Mødeservice.Konsulent) AS [Antal møder], Mødeservice.Team
FROM Mødeservice
GROUP BY Mødeservice.[Booket dato], Mødeservice.Konsulent, Mødeservice.Team
HAVING Mødeservice.[Booket dato] Between Date()-14 And Date()]. AS [%$##@_Alias]
GROUP BY Konsulent;

Sidste forespørgsel sætter de to forespørgsler sammen og laver beregningen omkring antal møder per time. Så det er resultatet af følgende forespørgsel jeg gerne ville kunne samle til én forespørgsel på baggrund af de to øverste:

SELECT [Antal møder].Konsulent, [Sum af Antal møder]/[Sum af Timesum] AS Effektivitet
FROM [Antal møder] INNER JOIN Timesum ON [Antal møder].Konsulent=[Timesum].Initialer;

Håber denne lange kludrede forklaring gav lidt mening, ellers uddyber jeg gerne. Håber nogen kan hjælpe, og på forhånd tak.
Avatar billede balk Nybegynder
01. november 2007 - 15:49 #2
???
Avatar billede balk Nybegynder
02. november 2007 - 11:48 #3
Jeg har selv løst det. :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester