Startseite
Stellenmarkt
Downloads
Kontakt
  Community Center:   Forum  |  Gruppen  |  Chat  |

Zurück   Forum Fachinformatiker.de > Fachliches > Datenbanken



Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 19.11.2008, 10:20   #1
Reg.-Benutzer
 
Reg.-Datum: 30.01.2006
Standard SQL Abfrage aber wie ?

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.
Leifu ist offline   Mit Zitat antworten
Alt 19.11.2008, 10:41   #2
Reg.-Benutzer
 
Reg.-Datum: 10.04.2008
Standard

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.
michaelmeier ist offline   Mit Zitat antworten
Alt 19.11.2008, 10:54   #3
Reg.-Benutzer
 
Benutzerbild von LadyPreis
 
Reg.-Datum: 02.07.2008
Ort: Großraum FFM
Standard

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 Tabelle
  • Dann 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
__________________
Verhandle nie mit Idioten. Sie ziehen dich auf ihr Niveau und schlagen dich mit Erfahrung

Zitat:
Zitat von Chief Wiggum Beitrag anzeigen
Klopp das Thema in die Tonne, wirf es weg, stopf alle Ausdrucke in den Aktenshredder, spül es im Klo runter, bring es zum Wertstoffhof der Stadtreinigung.
LadyPreis ist offline   Mit Zitat antworten
Alt 19.11.2008, 11:08   #4
Reg.-Benutzer
 
Reg.-Datum: 04.02.2007
Ort: Nähe München, Ndb
Standard

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
__________________
Zitat Tom Kyte:
I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

IRC: drdimitri in #oracle auf freenode
dr.dimitri ist offline   Mit Zitat antworten
Alt 19.11.2008, 11:10   #5
Reg.-Benutzer
 
Benutzerbild von Crash2001
 
Reg.-Datum: 20.05.2001
Ort: Hamburger Speckgürtel
Standard

Unter MSSQL sollte das mittels "top" machbar sein. Das ist afaik zumindest die Entsprechung der "Limit"-Funktion von MySQL.
__________________
MfG Crash2001
Love me or let it be, but don't play with me!
<O| mein IRC-Channel |O>
CCNA und FIAE

if (!$knowledge) { if(search($foo)==0) { post($question); } else { use_output_as_input($search); } } else { start_working(); }
Crash2001 ist offline   Mit Zitat antworten
Alt 19.11.2008, 11:22   #6
Reg.-Benutzer
 
Reg.-Datum: 09.11.2001
Ort: Black Forest
Standard

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
__________________
Against Garnmanipulation!
Goos ist offline   Mit Zitat antworten
Alt 19.11.2008, 11:35   #7
Reg.-Benutzer
 
Reg.-Datum: 30.01.2006
Standard

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.
Leifu ist offline   Mit Zitat antworten
Alt 19.11.2008, 11:43   #8
Reg.-Benutzer
 
Reg.-Datum: 09.11.2001
Ort: Black Forest
Standard

Das kann dann in etwa so ausschaun.

Code:
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
__________________
Against Garnmanipulation!
Goos ist offline   Mit Zitat antworten
Alt 19.11.2008, 11:45   #9
Reg.-Benutzer
 
Reg.-Datum: 30.01.2006
Standard

danke super werde das mal ausprobieren.
Leifu ist offline   Mit Zitat antworten
Alt 19.11.2008, 13:11   #10
Reg.-Benutzer
 
Reg.-Datum: 04.02.2007
Ort: Nähe München, Ndb
Standard

Des weiteren ist, wie schon angesprochen, das Statement ohne ORDER BY absolut witzlos, da es ansonsten keine definierte Reihenfolge gibt.

Dim
__________________
Zitat Tom Kyte:
I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

IRC: drdimitri in #oracle auf freenode
dr.dimitri ist offline   Mit Zitat antworten
Antwort

Tags: ,


Lesezeichen
Zurück   Forum Fachinformatiker.de > Fachliches > Datenbanken

Themen-Optionen
Ansicht


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Union Abfrage orthex Datenbanken 13 13.11.2008 12:07
Abfrage Problem Unrealfighter Datenbanken 3 27.05.2007 16:39
maximale länger einer mysql abfrage SwordMaster Datenbanken 1 04.11.2003 11:20
[SQL] Abfrage in Abfrage ? 2daBeat Datenbanken 4 31.10.2003 10:18
Parameter an bestehende Abfrage übergeben. JayN Delphi/RPG+CL/Sonstige 0 30.01.2003 08:37


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:04 Uhr.