Avatar billede ulrikp Nybegynder
03. december 2002 - 21:48 Der er 7 kommentarer og
1 løsning

Tricky SQL-sætning

Jeg har 2 tabeller:

A(Id,Name,Hits)
B(Id,AId,Name,Hits)

A kan have relateret 0 til et uendeligt antal forekomster af B.

Hits består af et tal.

Jeg vil gerne have følgende ud:
A.Name  A.Hits  SUM(B.Hits)

Hvordan dælen gør jeg det.

Jeg har prøvet med:

SELECT A.Name, SUM(B.Hits) FROM (SELECT A.Name, B.Hits FROM A, B WHERE A.ID=B.AID) GROUP BY A.Name

...men det første problem er, at join'en i den inderste select sætning springer de forekomster i A over, som ikke har relateret nogen forekomster af B. Det næste problem er at få A.Hits med, for hvis jeg bare skriver A.Name, A.Hits brokker den sig over at A.Hits ikke er en del af aggregat-funktionen.

Håber der er nogle der kan hjælpe mig!
03. december 2002 - 21:51 #1
Prøv denne:

SELECT A.Name, SUM(B.Hits) FROM A Inner Join B on A.ID = B.ID GROUP BY A.Name
Avatar billede nordclc Nybegynder
03. december 2002 - 21:53 #2
Du skal lige have a.Hits med i select'en og i Group By:

SELECT A.Name, a.Hits, SUM(B.Hits) FROM A Inner Join B on A.ID = B.ID GROUP BY A.Name, A.Hits
Avatar billede arne_v Ekspert
03. december 2002 - 21:54 #3
Jeg ikke prøvet men hvad med:

SELECT A.Name, A.Hits, SUM(B.Hits) FROM A Left Join B on A.ID = B.ID GROUP BY A.Name, A.Hits
Avatar billede nordclc Nybegynder
03. december 2002 - 22:00 #4
Arne_v> jeg tror s.. du har ret, for han (ulrikp) vil garanteret have alle fra a med, og ikke kun dem som har en relation i b!

//nordclc
Avatar billede ulrikp Nybegynder
03. december 2002 - 22:10 #5
Arne V: Det ser sgu ud til at virke. Du er en stjerne!
Avatar billede ulrikp Nybegynder
03. december 2002 - 22:16 #6
Jeg har så bare lige én "B-lignende" tabel mere, som er relateret på samme måde til A.
C(Id,AId,Name,Hits)
Her skal jeg også have SUM(C.Hits). Hvordan får jeg den med...?
Avatar billede arne_v Ekspert
03. december 2002 - 22:34 #7
Nu kan jeg ikke huske reglerne for aggregerende funktioner, men har du prøvet
med:

SELECT A.Name, A.Hits, SUM(B.Hits), SUM(C.Hits) FROM (A Left Join B on A.ID = B.AID) Left Join C on A.Id=C.AID GROUP BY A.Name, A.Hits

?
Avatar billede ulrikp Nybegynder
03. december 2002 - 22:44 #8
Ja, da, det ser også ud til at virke. Du er for sej (-:
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