"SELECT TOP"
Janko Wellmeier
- asp.net
0 Stefan Falz0 fredy
Hallo!
Ich habe 2 Probleme mit "SELECT TOP". Ich hoffe mir kann jemand helfen.
1. Wenn ich "SELECT TOP 10 * FROM [tabelle] ORDER BY fldID" nehme funktioniert es wunderbar, da jeder Wert bei ID nur einmal vorkommt. Ordne ich aber nach einem anderen Feld, welcher Inhalt auch doppelt vorkommen kann, so werden die Einträge mit dem gleichen Inhalt zusammen gewertet:
"SELECT TOP 10 * FROM [tabelle] ORDER BY fldStatus" --> gibt es nun 2 Felder, die beide den Status 2 haben, so kann es sein, daß ich 11 statt 10 Einträge kriege.
Kann man dies vermeiden??
2. Wie kann ich nicht die TOP 10 sondern erst die zweiten top 10 rausfiltern?? Gehtt das per SQL??
Hilfe wäre super.
Danke
Janko
Hallo Janko,
- Wenn ich "SELECT TOP 10 * FROM [tabelle] ORDER BY fldID" nehme funktioniert es wunderbar, da jeder Wert bei ID nur einmal vorkommt. Ordne ich aber nach einem anderen Feld, welcher Inhalt auch doppelt vorkommen kann, so werden die Einträge mit dem gleichen Inhalt zusammen gewertet:
»» "SELECT TOP 10 * FROM [tabelle] ORDER BY fldStatus" --> gibt es nun 2 Felder, die beide den Status 2 haben, so kann es sein, daß ich 11 statt 10 Einträge kriege.
Kann man dies vermeiden??
Probier mal folgendes SQL-Statement aus:
SELECT TOP 10 fldID, <spalte2>, <spalte3>, ... FROM <tabelle> ORDER BY fldStatus
- Wie kann ich nicht die TOP 10 sondern erst die zweiten top 10 rausfiltern?? Gehtt das per SQL??
Mit SQL nicht direkt, mit dem Recordset-Objekt kannst Du aber
die Anzahl der Ausgabesätze (und gecachten Sätze) einstellen.
<%
objRS.PageSize = 10
objRS.CacheSize = 10
objRS.AbsolutePage = 2
...
%>
Damit kannst Du direkt auf die Sätze 10 - 19 zugreifen
Etwas drumrumprogrammieren musst Du zwar noch, aber es
ist ja schon mal ein Anhaltspunkt.
Tschau, Stefan
Hi!
Ich hab' da mal folgendes in Access-SQL versucht:
SELECT distinct TOP 10 feld
FROM Tabelle1
order by feld
distinct unterdrückt doppelte Werte.
Die 2. 10. :
Das geht auch mit (Tricky-)SQL:
SELECT distinct top 10 feld
FROM Tabelle1 a
WHERE 3 <= ( SELECT count(*) rom Tabelle1 b where a.feld > b.feld)
order by feld
Grüße
fredy