# Sql Row_number()



## js-mueller (14. Mai 2006)

Hi,

ich hab ein Problem mit dem vom SQLServer2005 gegebenen Befehl ROW_NUMBER. 
Und zwar ich habe folgenden query

```
SELECT  
  berichte.beschreibung,
  berichte.datum,
  kategorien.name,
  berichte.idn,
  ROW_NUMBER() OVER(ORDER BY berichte.datum DESC)as rows
FROM   
   berichte,
   kategorien
WHERE
   kategorien.idn=berichte.kategorie
  AND -- Ohne die letzten Beiden Zeilen funktioniert der Query wie beschrieben, mit ihnen gibt es Fehler
  rows>1
```
Es geht nun darum das ich die Ausgabe Limitieren will.
Ich bekomm im query unter rows auch sehr nett die Zeilen nummern angezeigt.
Doch sobald ich das "rows>1" im query hab, wird mir als Fehler aus gegeben das rows kein spaltenname ist.
Nun meine Frage. Wie kann ich das rows ansprechen? Ich definier es ja im Selekt Bereich.
ich hoffe ihr könnt mir helfen.


----------



## Nico Graichen (14. Mai 2006)

Hi,

Limitierung im SQL Server lassen sich entweder mit dem Keyword TOP 

```
SELECT TOP 100 xyz FROM mytable
```
oder mit HAVING

```
SELECT xyz FROM mytable HAVING COUNT(*) > 1
```
realisieren.


```
SELECT xyz FROM mytable WHERE ROW_NUMBER > 1
```
sollte eigentlich auch möglich sein, kann ich aber nicht definitiv sagen.


----------



## js-mueller (15. Mai 2006)

Hi, danke für die antwort,
also das mit TOP funktioniert, aber mit Top kann ich ja nur die ersten x Datensätze ausgeben, ich möchte aber x-y Datensätze ausgegeben haben.
Die Funktion mit Having funktioniert leider nicht, da bekomm ich dann ne meldung
"Die 'berichte.beschreibung'-Spalte ist in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion und nicht in der GROUP BY-Klausel enthalten ist."
Und die ROW_NUMBER methode kennt er nicht.
Ich steig halt auf der MSDN Seite nicht ganz durch wie das mit ROW_NUMBER gemeint ist
http://msdn2.microsoft.com/en-us/library/ms186734(sql.90).aspx


----------

