Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL-Abfrage:Wie kann ich Daten der Zeile mit der Nummer 1000 direkt abrufen?

row_number ist der beste Ansatz, aber da Sie nur eine einzige Reihe wollen, schauen Sie sich unbedingt den Plan an. Es könnte sich als besser erweisen, die gewünschte Zeile zu identifizieren und dann wieder mit der ursprünglichen Tabelle zu verknüpfen, um zusätzliche Spalten abzurufen.

WITH T1
     AS (SELECT *,
                ROW_NUMBER() OVER (ORDER BY number) AS RN
         FROM   master..spt_values)
SELECT name,
       number,
       type,
       low,
       high,
       status
FROM   T1
WHERE  RN = 1000;

Gibt

WITH T2
     AS (SELECT number,
                type,
                name,
                ROW_NUMBER() OVER (ORDER BY number) AS RN
         FROM   master..spt_values)
SELECT TOP 1 C.name,
             C.number,
             C.type,
             C.low,
             C.high,
             C.status
FROM   T2
       CROSS APPLY (SELECT *
                    FROM   master..spt_values v
                    WHERE  v.number = T2.number
                           AND v.type = T2.type
                           AND ( v.name = T2.name
                                  OR ( v.name IS NULL
                                       AND T2.name IS NULL ) )) C
WHERE  RN = 1000;  

Gibt