08. februar 2006 - 21:39Der er
12 kommentarer og 1 løsning
hente sum og antal
Hejsa E
Jeg har 5 tabeller: vin - vID|navn|rettetaf|prodID brugere - navn|brugerID producent - prodID|prodname forhand - forhandlerID|lagerstatus|pris karakter - karakterID|beskrivelse|karakter
Jeg vil gerne have gennemsnitskarakteren ud, samt prisen for hver enkelt forhandler.
Jeg har lavet følgende der ikke virker, men måske kan give et hint om hvad jeg vil.
SELECT v.navn, v.aargang, v.rettet, v.rettetaf, v.volumen, v.prodID , p.prodname , CASE WHEN k.beskrivelse <> '' THEN 'y' ELSE 'n' END AS anmeldt , (SUM(k.karakter)/COUNT(k.karakterID)) AS karakter, COUNT(k.karakterID) AS antalstemmer , f.pris , CASE WHEN f.lagerstatus = 0 THEN '<b>ukendt</b>' WHEN f.lagerstatus = 1 THEN 'på lager' END AS lagerstatus FROM vin v INNER JOIN karakterer k ON k.vID = v.vID INNER JOIN forhand f ON f.vID = v.vID LEFT JOIN producent p ON v.prodID = p.prodID WHERE f.forhandlerID = @dealerID GROUP BY k.karakter ORDER BY @orderBy
Tag dig ikke af at jeg har sat forhandlerid > 0 det er bare for at få mange resultater.
SELECT k.vID, v.navn, v.aargang, v.rettet, v.rettetaf, v.volumen, v.prodID p.prodname CASE WHEN k.beskrivelse <> '' THEN 'y' ELSE 'n' END AS anmeldt AVG(k.karakter) AS karakter, COUNT(k.vID) AS antalstemmer f.pris, MIN(f.pris) AS pris2 CASE WHEN f.lagerstatus = 0 THEN '<b>ukendt</b>' END AS lagerstatus FROM vin v INNER JOIN karakterer k ON k.vID = v.vID INNER JOIN forhand f ON f.vID = v.vID LEFT JOIN producent p ON v.prodID = p.prodID WHERE f.forhandlerID > ",_dealerID); GROUP BY f.forhandlerID, v.vID
Dette er næsten rigtigt, men det lister hver vin lige så mange gange som antallet af forhandlere.
Arne, skal vi gøre den færdig eller skal jeg lukke ?
Jeg har ændret lidt i strukturen af tabeller, men det skulle ikke ændre på helheden. Du får den lige som den ser ud nu.
SELECT k.vID, gv.navn, v.aargang, v.rettet, v.rettetaf, bv.volumen, gv.prodID, p.prodname , CASE WHEN k.beskrivelse <> '' THEN 'y' ELSE 'n' END AS anmeldt , AVG(k.karakter) AS karakter, COUNT(k.vID) AS antalstemmer , MIN(f.pris), MAX(f.pris) AS pris2, 'Vises ikke' AS lagerstatus FROM vin v INNER JOIN grundvin gv ON gv.gvID = v.gvID INNER JOIN basisvin bv ON bv.bvID = v.bvID INNER JOIN karakterer k ON k.vID = v.vID INNER JOIN forhand f ON f.vID = v.vID LEFT JOIN producent p ON gv.prodID = p.prodID WHERE f.forhandlerID > 0 GROUP BY v.vID, v.aargang ORDER BY karakter, antalstemmer
Det er den der "antalstemmer" der ikke er rigtig, jeg troede det var antallet af forhandlere, men det er det ikke alligevel, jeg kan ikke gennemskue det. Kan du hjælpe med at antalstemmer faktisk er antallet af karakterer på den enkelte vin.
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.