Avatar billede Slettet bruger
22. december 2003 - 01:36 Der er 11 kommentarer og
1 løsning

Access - SELECT TOP

Jeg foretager flg SQL Statement mod en Access 2000 Database:

"SELECT TOP 3 * FROM fspLoppe ORDER BY Loppe_Dato"

"fspLoppe" er en forespørgsel i Access, og ikke en anlmindelig tabel.

Problemet: Den viser alle (ca 100) poster på min ASP side. og ikke kun de 3 øverste.

Hvis jeg ændrer SQL statement'en til: "SELECT TOP 3 * FROM fspLoppe"

... så virker det fint. Bortset fra at jeg må undvære ORDER BY.

Lign problemer har jeg med andre forespørgsler i mit ASP projekt. Holdes SELECT TOP statementen simpel, så virker den, men hvis jeg sætter bare de mindste kriterier ind i SQL'en så viser den bare alle poster der findes i den givne forespørgsel eller tabel.

Kan nogen hjælpe?
Avatar billede eagleeye Praktikant
22. december 2003 - 08:48 #1
Det er fordi TOP tager 3 forskellige poster og ikke bare de første 3 poster. Så hvis fspLoppe er ens for dem alle tager den 3 forskellige fspLoppe det kan være det er 50 poster.

Det kan dog løses ved at tilføje at den også skal sortere på en autonummer kolonne, så det bare som der skal være dem med højest ID eller laves ID som skal vises:

"SELECT TOP 3 * FROM fspLoppe ORDER BY Loppe_Dato, id"
Avatar billede eagleeye Praktikant
22. december 2003 - 08:57 #2
Altså sagt på en lidt anden måde: TOP vælger ikke mellem ens værdier.
Og ved at tilføje autonummer kolonnen har TOP noget at vælge imellem.
Avatar billede carmakiller Nybegynder
22. december 2003 - 15:39 #3
Prøv at droppe * efter TOP 3 så linien kommer til at hedde:

"SELECT TOP 3 FROM fspLoppe ORDER BY Loppe_Dato"

Så skulle du meget gerne kun få de 3 øverste poster. Hvis du sortere faldende på din ID, er det samtidig de 3 nyeste poster.
Avatar billede clscableguy Praktikant
23. december 2003 - 07:27 #4
Jeg har lige testet det og SELECT TOP 3 * FROM fspLoppe ORDER BY Loppe_Dato virker fint. Så der er nok et eller andet i din forespørgsel.

eagleeye >> det du skriver med at "Så hvis fspLoppe er ens for dem alle tager den 3 forskellige fspLoppe det kan være det er 50 poster." det kan den ikke da fspLoppe er en forespørgsel i Access. Der er kun en fspLoppe, så den kan ikke vælge 3 forskellige fspLoppe. fspLoppe indholder værdier fra nogle tabeller.
Avatar billede eagleeye Praktikant
23. december 2003 - 10:44 #5
clscableguy >> Det jo totalt ligemeget om fspLoppe er en tabel eller en forespørgsel den returnere et sæt data. Prøv du istedet at bruge fornuftige test data inden du udtaler dig om hvorvidt det er rigtigt.

Løsningen er som jeg har beskrevet tilføje ID til order by eller kun bruger ID i order by. Jeg gentager gerne noget af teksten:
TOP vælger ikke mellem ens værdier.
Avatar billede clscableguy Praktikant
23. december 2003 - 14:01 #6
eagleeye >> undskyld mig, der er noget jeg ikke helt har forstået. Siger du at hvis jeg har en tabel der ser sådan her ud:

Tabel:
Felter    Type
tekst    Text

og i den tabel har jeg følgende værdier

Tabel:
hej
hej
hallo
goddag

Og jeg så har en SQL der ser sådan her ud Select TOP 3 * from tabel
så for jeg ikke følgende output:
hej
hej
hallo
Avatar billede eagleeye Praktikant
23. december 2003 - 14:06 #7
Nej det siger jeg ikke så vil den tage 3. Proplemet kommer hvis du har order by kolonne og der er flere ens end du vil havde. Eks:

Tabel:
hej
hej
hej
hej
hej
hej
hallo
noget

og du bruger "select top 3 * form tabel order by tekst"

Så får du:
hallo
hej
hej
hej
hej
hej
hej
Avatar billede clscableguy Praktikant
23. december 2003 - 14:11 #8
undskyld, jeg kan se problemet.  :)
Avatar billede clscableguy Praktikant
23. december 2003 - 14:12 #9
men prøv så lige denne:
Select TOP 3 * from testtabel order by tekst desc
Avatar billede eagleeye Praktikant
23. december 2003 - 14:19 #10
Ikke med??
Problemet opstår når der er flere ens kolonne og den kolonne er i order by, og det antal er større end det tal man har angivet efter TOP.
Avatar billede eagleeye Praktikant
23. december 2003 - 14:34 #11
Og kan man ikke få ført en ID igennem forespørgselen af den ene eller anden grund kan man lave det som dette med en select i en select:

SQL = "SELECT TOP 3 * FROM (SELECT TOP 3 * FROM fspLoppe ORDER BY Loppe_Dato);"
Avatar billede Slettet bruger
24. december 2003 - 02:28 #12
Det fungerede hvert fald at tilføje ID i ORDER BY

Jeg troede bare, at min Loppe_Dato var unik, da den gerne skulle fange både dag og klokkeslet. Jeg må tage fejl.

PS: "SELECT TOP 3 FROM fspLoppe WHERE......" virkede ikke - Access vil åbenbar have sin "*".

Tak for hjælpen.
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
Kurser inden for grundlæggende programmering

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