64 votes

T-SQL Comment sélectionner uniquement la deuxième ligne d'un tableau ?

J'ai un tableau et j'ai besoin de récupérer l'ID de la deuxième ligne. Comment faire ?

Par Top 2 Je sélectionne les deux premières lignes, mais j'ai besoin de seulement la deuxième ligne

118voto

SQLDiver Points 1608

Dans SQL Server 2012+, vous pouvez utiliser OFFSET...FETCH :

SELECT
   <column(s)>
FROM
   <table(s)>
ORDER BY
   <sort column(s)>
OFFSET 1 ROWS   -- Skip this number of rows
FETCH NEXT 1 ROWS ONLY;  -- Return this number of rows

30voto

Martin Smith Points 174101

Supposons que le serveur SQL 2005+ un exemple de la façon d'obtenir juste la deuxième ligne (ce que je pense que vous demandez - et c'est la raison pour laquelle top ne fonctionnera pas pour vous)

set statistics io on

;with cte as
(
  select *
    , ROW_NUMBER() over (order by number) as rn
  from master.dbo.spt_values
) 
select *
from cte
where rn = 2

/* Just to add in what I was running RE: Comments */
;with cte as
(
  select top 2 *
    , ROW_NUMBER() over (order by number) as rn
  from master.dbo.spt_values
) 
select *
from cte
where rn = 2

23voto

mmhasannn Points 10115

Les fonctions de numéro de ligne ne sont pas nécessaires si l'ID du champ est unique.

SELECT TOP 1 *
FROM (
  SELECT TOP 2 * 
  FROM yourTable
  ORDER BY ID
) z
ORDER BY ID DESC

11voto

KM. Points 51800

Utilisez ROW_NUMBER() pour numéroter les lignes, mais utilisez TOP pour ne traiter que les deux premiers.

Essayez ceci :

DECLARE @YourTable table (YourColumn int)
INSERT @YourTable VALUES (5)
INSERT @YourTable VALUES (7)
INSERT @YourTable VALUES (9)
INSERT @YourTable VALUES (17)
INSERT @YourTable VALUES (25)

;WITH YourCTE AS
(
  SELECT TOP 2
    *, ROW_NUMBER() OVER(ORDER BY YourColumn) AS RowNumber
  FROM @YourTable
) 
SELECT *
FROM YourCTE
WHERE RowNumber=2

SORTIE :

YourColumn  RowNumber
----------- --------------------
7           2

(1 row(s) affected)

6voto

Patriotec Points 211

Je suppose que vous utilisez SQL 2005 ou supérieur. La 2ème ligne sélectionne les 2 premières lignes et en utilisant la commande ORDER BY ROW_COUNT DESC la 2ème ligne est disposée comme étant la première, puis elle est sélectionnée en utilisant TOP 1.

SELECT TOP 1 COLUMN1, COLUMN2
from (
  SELECT TOP 2 COLUMN1, COLUMN2
  FROM Table
) ORDER BY ROW_NUMBER DESC

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X