Janko Wellmeier: "SELECT TOP"

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

  1. Hallo Janko,

    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??

    Probier mal folgendes SQL-Statement aus:
    SELECT TOP 10 fldID, <spalte2>, <spalte3>, ... FROM <tabelle> ORDER BY fldStatus

    1. 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

    1. 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