Avatar billede bri2004 Nybegynder
21. juli 2004 - 15:59 Der er 6 kommentarer og
1 løsning

lave top 25 pr. id

Jeg har to tabeller. En med ca. 60 unikke 4 cifrede Vare ID. En anden har både køb pr vare ID.
Jeg vil gerne lave en ny tabel eller en forespørgsel, der tager de 25 største køb pr. vare ID.
Dvs. alle vare ID skal komme ud med de 25 største køb.
Avatar billede jensen363 Forsker
21. juli 2004 - 16:17 #1
En UNION SELECT kan gøre det .... kræver at du opretter en UNION pr. Vare ID
Avatar billede jensen363 Forsker
21. juli 2004 - 16:23 #2
Altså noget i denne stil :

SELECT TOP 25 Tabel.VareID, Tabel.VareKøb
FROM Tabel
WHERE (((Tabel.VareID)=1))
ORDER BY Tabel.VareKøb DESC
UNION
SELECT TOP 25 Tabel.VareID, Tabel.VareKøb
FROM Tabel
WHERE (((Tabel.VareID)=2))
ORDER BY Tabel.VareKøb DESC;
Avatar billede proaccess Nybegynder
22. juli 2004 - 07:33 #3
Du skal IKKE bruge UNION til dette, derimod noget a'la dette (Jeg kender desværre ikke dine tabel- og feltnavne, så jeg har måttet gætte):

SELECT K.*
FROM VareKøb AS K
WHERE K.Pris In (SELECT TOP 2 Pris FROM VareKøb WHERE Vare=K.Vare ORDER BY Pris DESC)

Du er kun nødt til at medtage din Vare-tabel, hvis du skal have vist nogle data fra denne, som ikke er med i varekøbstabellen... fx. varenavn el. lign.
Dette kan gøres som følger:

SELECT V.VareNavn, K.*
FROM Varer AS V INNER JOIN VareKøb AS K ON V.Vare=K.Vare
WHERE K.Pris In (SELECT TOP 2 Pris FROM VareKøb WHERE Vare=K.Vare ORDER BY Pris DESC)
Avatar billede proaccess Nybegynder
22. juli 2004 - 07:35 #4
Der skal selvfølgelig stå "TOP 25" i begge eksempler...  ;0)
Avatar billede bri2004 Nybegynder
22. juli 2004 - 11:32 #5
Jensen363: Jeg vil gerne undgå en union

ProAccess: Kan du ikke give mig en forklaring på hvad du refererer til med: v,k og hhv. v.varenavn og k.pris.
Dit svar virker ret lovende, så jeg vil gerne lige afprøve det, inden jeg tildeler point.
Avatar billede proaccess Nybegynder
22. juli 2004 - 12:18 #6
Jeg går ud fra at din tabel med varedata hedder "Varer" og tabellen med købsdata så hedder "VareKøb", i FROM-delen af SQL'en bliver de så forkortet til henholdsvis V og K.
Ligeledes går jeg ud fra at der findes en kolonne i begge tabeller, som hedder "Vare", og som henviser til den vare, der købes...  og at du vil sortere posterne ud fra en kolonne, som hedder "Pris"

ERGO:
SELECT V.VareNavn, K.*
FROM Varer AS V INNER JOIN VareKøb AS K ON V.Vare=K.Vare
WHERE K.Pris IN (SELECT TOP 25 Pris FROM VareKøb WHERE Vare=K.Vare ORDER BY Pris DESC)

betyder:
HENT varenavn fra varestamdata og alle kolonner fra varekøb hvor det er Vare(nummer), som binder tabellerne sammen
HVOR prisen for varekøbet er i de 25 største priser for den pågældende vare.
Avatar billede bri2004 Nybegynder
22. juli 2004 - 14:24 #7
Jo tak. Det var også det jeg regnede med. Jeg ville bare være sikker (du havde såmænd ikke behøvet at oversætte). Jeg har af prøvet det. Og det ser ok ud. Men kan bare ikke håndtere, at der har været mange køb til den samme pris.
Tak for hjælpen, men jeg at se om jeg kan finde en anden løsning.
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