Avatar billede MortenJA Nybegynder
19. maj 2010 - 14:19 Der er 9 kommentarer og
1 løsning

Hjælp til joinforbindelse

Min opgave er som følgende. Jeg har følgende database med relationer:

http://www.billedeupload.dk/photo/2010-05/50c05adc/relationer.JPG.html

Mit spørgsmål er så, hvordan jeg får opstillet fejlprocenten for hvert år under forudsætning af, at ProdRegID kan optræde flere gange i tabellen Fejl. Fejlprocenten beregnes som:
antal producerede i alt / antal fejl i alt = sum(Pantal) / sum(AntalF)

Lige pt. er jeg kommet frem til følgende SQL kode, som giver et for højt tal, da nogle "Pantal" bliver tælt med flere gange:
SELECT Year(produktion.dato), Sum(Pantal) / Sum(AntalF)
FROM fejl LEFT JOIN produktion ON fejl.prodregid = produktion.prodregid
GROUP BY Year(produktion.dato)

What to do?
Avatar billede janus_007 Nybegynder
19. maj 2010 - 18:55 #1
Hvad med den dato som ligger i Fejltabellen? Kan den ikke bruges?
Avatar billede wagner Nybegynder
19. maj 2010 - 23:32 #2
Hvad med at gruppere fejlen i henhold til produktionsid først, som her:

SELECT Year(produktion.dato), Sum(Pantal) / Sum(AntalF)
FROM Produktion
LEFT JOIN (
select ProdRegID, sum(AntalF) as 'AntalF'
from Fejl
group by ProdRegID
) grupperedefejl
ON grupperedefejl.prodregid = produktion.prodregid
GROUP BY Year(produktion.dato)

På denne måde bør du undgå de dobbelttællinger, som 1:N forbindelsen kan medføre.

Wagner
Avatar billede MortenJA Nybegynder
20. maj 2010 - 09:25 #3
janus_007: Det kan ikke lade sig gøre ved at bruge dato - jeg ved i hvert fald ikke lige hvordan skal kringles.

wagner: Det begynder at ligne noget rigtigt, men jeg kan ikke få Sum(AntalF) til at virke i den første select-sætning. Når jeg prøver at køre forespørgslen, så kender den ikke "AntalF" og beder mig om at indtaste det.
Avatar billede wagner Nybegynder
20. maj 2010 - 11:12 #4
Måske skal du præfixe den med grupperedefejl.AntalF ellers prøv at tjekke om der er stavet rigtigt i subselecten, hvor fejlene grupperes.

Wagner
Avatar billede MortenJA Nybegynder
20. maj 2010 - 15:22 #5
Jeg har prøvet lidt af nu, men kan ikke få det til at virke. Den forstår ikke at referere til fejl-tabellen i den første select-sætning.

Kan det være fordi jeg kører det i Access, at det skal laves på en anden måde?
Avatar billede wagner Nybegynder
20. maj 2010 - 16:05 #6
Ja, det kunne jeg godt forestille mig. Ved ikke helt hvordan den reagerer på subselects.

I stedet for at lave det som en subselect, så prøv at lave koden for grupperedefejl til et view.

Wagner
Avatar billede MortenJA Nybegynder
20. maj 2010 - 20:42 #7
Hvad mener du med at lave den til et view?



Jeg er prøvet at finde anførelsestegnene omkring AntalF, så koden så således ud:

SELECT Year(produktion.dato), Sum(Pantal) / sum(AntalF)
FROM Produktion LEFT JOIN (select ProdRegID, sum(AntalF) as AntalF
from Fejl
group by ProdRegID
)  AS grupperedefejl ON grupperedefejl.ProdRegID = produktion.ProdRegID
GROUP BY Year(produktion.dato)

Det giver mig følgende fejlmeddelses:
"En cirkulær reference blev forårsaget af aliaset "AntalF" på forespørgselsdefinitionens SELECT-liste."
Avatar billede wagner Nybegynder
20. maj 2010 - 21:07 #8
Okay, man kan vist ikke lave views i access.

Hvad giver denne her?

SELECT Year(produktion.dato), Sum(produktion.Pantal) / sum(grupperedefejl.AntalFejl) as FejlAndel
FROM Produktion
LEFT JOIN
(select ProdRegID, sum(AntalF) as AntalFejl
from Fejl
group by ProdRegID
)  AS grupperedefejl ON grupperedefejl.ProdRegID = produktion.ProdRegID
GROUP BY Year(produktion.dato)
Avatar billede MortenJA Nybegynder
24. maj 2010 - 15:41 #9
Wuhu, det virker! Super! Jeg har et spørgsmål mere, som jeg har oprettet i en ny tråd, for at du kan få point igen, hvis du ønsker at hjælpe mig yderligere :)

http://www.eksperten.dk/spm/910454
Avatar billede wagner Nybegynder
24. maj 2010 - 20:47 #10
Godt du kunne bruge det.

Jeg har kigget på dit andet spørgsmål, men mangler lidt oplysninger.

Wagner
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