Avatar billede jaislytje Nybegynder
25. august 2009 - 10:23 Der er 2 kommentarer

Samle flere queries i een med subqueries? - SQL-ekspert søges!!

Det her er godt nok fra en Access-db jeg arbejder på, men det er mest et SQL-spørgsmål, så derfor er den endt i Generelt.

Jeg er er ved at få grå hår i hovedet af at spekulere på det her problem.

Er der nogen der kan gennemskue om følgende del-forespørgsler (fra Access) kan samles i een vha subqueries:

"fspBeregnUdlejede":
SELECT Sum(GrejTypeLeje.Antal) AS AntalUdlejede, Udlejning.AftaltUdleverDato, Udlejning.AftaltAfleverDato, GrejTypeLeje.GrejTypeID
FROM Udlejning INNER JOIN GrejTypeLeje ON Udlejning.UdlejningID=GrejTypeLeje.UdlejningID
GROUP BY Udlejning.AftaltUdleverDato, Udlejning.AftaltAfleverDato, GrejTypeLeje.GrejTypeID
HAVING (((Udlejning.AftaltUdleverDato)>#6/20/2009#));

"fspBeregnAntalUdlejede":
SELECT GrejType.GrejTypeID, Sum(IIf(IsNull([AntalUdlejede]),0,[AntalUdlejede])) AS AntUdlej
FROM GrejType LEFT JOIN fspBeregnUdlejede ON GrejType.GrejTypeID=fspBeregnUdlejede.GrejTypeID
GROUP BY GrejType.GrejTypeID;

"Samlende query"
SELECT GrejType.*, [Antal]-[AntUdlej] AS antalLedige
FROM GrejType INNER JOIN fspBeregnAntalUdlejedeSum ON GrejType.GrejTypeID = fspBeregnAntalUdlejedeSum.GrejTypeID;

Tabellerne ser nogenlunde sådan ud:

GrejType
GrejTypeId
Betegnelse
...

GrejTypeLeje
GrejTypeId
UdlejningId
Antal

Udlejning
UdlejningID
AftaltUdleverDato
AftaltAfleverDato
...

Det skal siges at det virker sådan set fint, sålænge jeg kører det ved hjælp af Access's del-forespørgsler, bortset fra når jeg ændrer den faste dato #6/20/2009# til en variabel (Me!AftaltUdleverDato), selvom dette felt findes i den åbnende formular.

Måske er variablen for langt inde i udtrykket til at Access kan gennemskue det, i alle fald beder den hver gang mig om at taste værdien ind, selvom den som sagt er til stede, både i formularen der åbner og den der åbnes.

Derfor var min tanke at tage fuld kontrol ved at samle hele forespørgslen i en SQL-sætning, og så bare pådutte den kontrolkilden på den formular der skal bruge den.
Så kan jeg jo snildt styre variable betingelser.

Men her er det så jeg har brug for hjælp, for det er godt nok dejligt kompliceret med alle de aggregerede udtryk inde i joins ;)
Avatar billede arne_v Ekspert
26. august 2009 - 00:27 #1
Da de 3 queries returnerer forskelligt antal kolonner af forskellige typer saa kan jeg ikke se hvordan du skal kunne samle dem.
Avatar billede jaislytje Nybegynder
27. august 2009 - 10:49 #2
Næh, det er helt sikkert ikke lige nemt. Og måske har jeg ikke forklaret det tilstrækkeligt til at det overhovedet kan gennemskues.

Men, i mellemtiden løste jeg det konkrete problem ved at ændre parameteren i sammenligningen med dato til at hente den direkte fra formularen, dvs:

[Forms]![frmVaelgGrej].[AftaltAfleverDato]

istedet for me!AftaltAfleverDato

og desuden i VBA-koden sikre at kontrolkilden til formularen først beregnes efter at de dato-værdier jeg skal sammenligne med er sat i formularen.

Det virkede, så indtil videre er problemet knap så presserende. Men skulle en genial sql-ekspert komme op med et forslag til at samle de tre queries i en, vil jeg stadig gerne smide 30 point efter det.
Man ved aldrig om jeg skulle få brug for det andetsteds i projektet ;)

  Jais
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
Computerworld tilbyder specialiserede kurser i database-management

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