Veröffentlicht 19. November 200816 j Hallo an alle MSSQL Freaks, ich hab da mal ein Problem. Ich habe eine Tabelle. Diese Tabelle besteht aus mehreren Einträge. Ich will nun eine Abfrage haben die mir diese Tabelle anzeigt jedoch die erst 50 Einträge nicht anzeigt. Quasi ab dem 51. Wie kann ich das machen ? Über eure Ideen würde ich mich freuen.
19. November 200816 j mit oracle wär das nicht passiert... *scnr* scheinbar ist es mit dem ms sql nicht ganz so einfach... habe hier nen thread im forum gefunden schauste hier vielleicht ist das was für dich. habe hier leider nur oracle-server, daher kann ich's nicht validieren.
19. November 200816 j ich hätte eine idee, wie das funktionieren könnte, ist aber für einen grossen Datenbestand nicht gerade performant: erstelle 2 identische Views der TabelleDann löscht du aus dem 2ten View die ersten 49 Zeilen (LIMIT)mittels INTERSECT die beiden Views abgleichen. Dadurch werden dir nur die Daten angezeigt, die in beiden VIEWs enthalten sind. da in einem view die ersten 49 Zeilen fehlen, werden dir mit INTERSECT alle Daten ab zeile 50 ausgegeben da ich aber nicht sicher bin, ob das funktioniert, probier das erstmal auf einer testumgebung. Gruß Die Lady
19. November 200816 j Naja LIMIT gibts in MSSQL nicht, das heißt dort TOP, aber es sollte auch etwas eleganter gehen: T-SQL: Paging with ROW_NUMBER() Im Prinzip ist das nichts anderes als Paging. Dim
19. November 200816 j Unter MSSQL sollte das mittels "top" machbar sein. Das ist afaik zumindest die Entsprechung der "Limit"-Funktion von MySQL.
19. November 200816 j Hi Leifu, ich hoffe, du bist dir darueber im klaren, dass eine Tabelle per Definition erstmal nicht softiert ist. Ohne Sortierkriterium kannst du also auch keine "ersten" 50 Eintraege ermitteln, die du weglassen willst. Ansonsten gehts ab SQL Server 2005 wie schon von dr.dimitri erwaehnt ueber die ROW_NUMBER() Funktion und bei kleineren SQL Server Versionen ueber ne korrelierte Subquery in der du deine Zeilennummern selbt ermittelst. Goos
19. November 200816 j Autor Danke für die Infos. Wie würde das dann ausehen ? Select * FROM Tabelle dann den Sort Befehl ? und dann ROW_Number() ? Sorry bin da noch nicht der profi drin. Habe bis jetzt nur "einfache" Abfragen erstellt.
19. November 200816 j Das kann dann in etwa so ausschaun. WITH mycte AS (SELECT *, ROW_NUMBER() OVER (ORDER BY col1 ASC) AS 'row_num' FROM tabelle1 ) SELECT col1, col2, col3 FROM mycte WHERE row_num > 50 Du benutzt dabei einen CTE (mycte) in dem du eine Zeilennummer generierst. Die Zeilennummer wird generiert ueber die Spalte col1 aufsteigend. Danach selektierst du alles was du von der Tabelle brauchst von deinem CTE und kannst auf die generierte Zeilnnummerspalte (row_num) zugreifen . Goos
19. November 200816 j Des weiteren ist, wie schon angesprochen, das Statement ohne ORDER BY absolut witzlos, da es ansonsten keine definierte Reihenfolge gibt. Dim
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.