Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Requête SQL :Comment puis-je obtenir directement les données de la ligne portant le numéro 1000 ?

row_number est la meilleure approche, mais comme vous ne voulez qu'une seule rangée, assurez-vous de regarder le plan. Il peut s'avérer préférable d'identifier la ligne souhaitée, puis de revenir sur la table d'origine pour récupérer des colonnes supplémentaires.

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;

Donne

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;  

Donne