Avatar billede ircnoob Nybegynder
14. december 2007 - 23:59 Der er 12 kommentarer og
1 løsning

Kun få et produkt return én gang

Har følgende :"
SELECT FoodInfo.FoodId, FoodNutr.SrOr, FoodNutr.DanName FROM (FoodInfo INNER JOIN FoodNutr ON FoodInfo.FoodId = FoodNutr.FoodId AND FoodInfo.FoodId = FoodNutr.FoodId) WHERE (FoodInfo.MainGrp = ?) ORDER BY FoodNutr.DanName "

For så vidt godt nok...
Problemet er, at der er en masse varer, der har samme navn (FoodNutr.DanName) .. vil kun have vist dem en enkelt gang..

(hvor jeg så skal have lavet noget gennemsnit af FoodNutr.SrOr, der indeholder forskellige decimal tal, for hver gang FoodNutr.DanName går igen (det er ikke et unikt produkt) )...

Nogen der lige kan hjælpe med at gennemskue de to problemstillinger :) ?
Avatar billede arne_v Ekspert
15. december 2007 - 01:53 #1
et par forslag:

SELECT DISTINCT FoodInfo.FoodId, FoodNutr.SrOr, FoodNutr.DanName
FROM (FoodInfo INNER JOIN FoodNutr ON FoodInfo.FoodId = FoodNutr.FoodId AND FoodInfo.FoodId = FoodNutr.FoodId)
WHERE (FoodInfo.MainGrp = ?)
ORDER BY FoodNutr.DanName

og

SELECT AVG(FoodNutr.SrOr) AS AvgSrOr, FoodNutr.DanName
FROM (FoodInfo INNER JOIN FoodNutr ON FoodInfo.FoodId = FoodNutr.FoodId AND FoodInfo.FoodId = FoodNutr.FoodId)
WHERE (FoodInfo.MainGrp = ?)
GROUP BY FoodNutr.DanName
ORDER BY FoodNutr.DanName
Avatar billede ircnoob Nybegynder
15. december 2007 - 11:37 #2
Ja det var jo også sådan jeg skulle mene, det skulle være :)

Dog kommer Produkteter med samme navn dog fortsat i en lind strøm.. så ændrede desværre ikke rigtig noget.. vil lige prøve at lege med din avarage løsning :d
Avatar billede ircnoob Nybegynder
15. december 2007 - 11:49 #3
Må vist hellere lige prøve at formulere det klarere.

Altså har en masse produkter, der har samme navn. Ønsker kun vist de, der har samme navn, én gang. De produkter, der havde samme navn, har dog forskellige værdier. Så derfor har jeg brug for gennemsnittet af de produkters FoodNutr.SrOr, der har samme navn(ikke for samtlige produkter)...
Avatar billede ircnoob Nybegynder
15. december 2007 - 11:54 #4
You tried to execute a query that does not include the specified expression 'FoodId' as part of an aggregate function. .. hvad menes der mon, foodid skal jo heller ikke være en del af udregningen .. ?
Avatar billede ircnoob Nybegynder
15. december 2007 - 12:00 #5
giver da ingen mening den DISTINCT ikke virker .oO
Avatar billede ircnoob Nybegynder
15. december 2007 - 12:14 #6
SELECT DISTINCT FoodInfo.DanName, FoodInfo.FoodId FROM (FoodInfo) WHERE (FoodInfo.MainGrp = ?) ORDER BY FoodInfo.DanName

Så virker det med unik... så må jeg jo kunne tilføje gennemsnittet af FoodNutr.SrOr på en eller anden måde :)
Avatar billede ircnoob Nybegynder
15. december 2007 - 12:24 #7
ligger i en access database pt.. men er det muligt at oprette en stored prodedure der kan beregne gennemsnittet af FoodNutr.SrOr where foodnuts.danname = foodinfo.danname..  eller kan det også flettes ind i overstående sql ?
Avatar billede arne_v Ekspert
15. december 2007 - 19:29 #8
Brug AVG løsningen.

Hvis du vælger at selecte FoodId så skal den med i GROUP BY listen.
Avatar billede ircnoob Nybegynder
15. december 2007 - 19:37 #9
Hej,
når jeg prøver at bruge den, virker det ikke længere og kommer med den tidligere nævnte fejl med :"You tried to execute a query that does not include the specified expression 'FoodId' as part of an aggregate function."..

Ser sådan ud.. men kan ikke lige se, hvordan den skal vide, at den kun skal tage avarage på de produkter, der har samme navn og ikke samtlige ?

SELECT DISTINCT FoodInfo.DanName, AVG(FoodNutr.SrOr) AS AvgSrOr, FoodInfo.FoodId FROM (FoodInfo) WHERE (FoodInfo.MainGrp = ?) GROUP BY FoodInfo.DanName
ORDER BY FoodInfo.DanName
Avatar billede arne_v Ekspert
15. december 2007 - 23:33 #10
####Hvis du vælger at selecte FoodId så skal den med i GROUP BY listen.####

Altså:

SELECT DISTINCT FoodInfo.DanName, AVG(FoodNutr.SrOr) AS AvgSrOr, FoodInfo.FoodId FROM (FoodInfo) WHERE (FoodInfo.MainGrp = ?) GROUP BY FoodInfo.DanName,FoodInfo.FoodId
ORDER BY FoodInfo.DanName
Avatar billede ircnoob Nybegynder
16. december 2007 - 15:18 #11
KANON :D :D
(jeg skal vist lige have læst op på hvad det group by går ud på :)  )

Gider du smide et svar :)

Jeg forstår dog stadig ikke, hvordan den skal vide, at den skal tage gennemsnittet af de varer, der har samme navn, og ikke samtlige varer :)  .. Har det noget med group by at gøre ?  men super, virker !!
Avatar billede arne_v Ekspert
16. december 2007 - 15:23 #12
det har netop noget med GRIUP BY at gøre !
Avatar billede arne_v Ekspert
21. januar 2008 - 04:43 #13
så mangler du bare at acceptere svaret
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