Jak można uzyskać n-ty wiersz (tj. 5. wiersz) z wyniku zapytania w SQL Server?Jak uzyskać n-ty wiersz w tabeli programu SQL Server?
Odpowiedz
Masz wiele opcji, opartych na this link. Wszystkie te techniki odnoszą się do SQL 2000. Ten, którego wcześniej używałam, to opcja nr 1, gdzie bierzesz podzbiór 5-elementowy uporządkowany w jedną stronę, a następnie wybierasz wiersz "TOP" z podzbioru zamawianego w inny sposób. Działa świetnie!
SELECT TOP 1 FName
FROM
(
SELECT TOP 5 FName
FROM Names
ORDER BY FName
) sub
ORDER BY FName DESC
W SQL 2005 i nawet łatwiej - trzeba wierszy funkcji zamawiania takich jak ROW_NUMBER() który zrobi co trzeba bezpośrednio.
ROW_NUMBER() jest obecny w SQL Server 2005 ... – AdaTheDev
Zmodyfikowany, dziękuję! – mwigdahl
Zwróć uwagę, że jeśli użyjesz tej metody i n <5 wierszy, otrzymasz n-ty wiersz, a nie nic. Na przykład, jeśli w nazwach są 4 wiersze, to spowoduje to powrót do 4. wiersza. To może być dobre lub złe w zależności od tego, czego się spodziewasz. –
SQL Server 2005 i nowszych:
with Records AS(select row_number() over(order by datecreated) as 'row', *
from Table)
select * from records
where row=5
Można zmienić kolejność przez w celu ustalenia, w jaki sposób posortować dane, aby uzyskać piątym rzędzie.
Testowany na mojej lokalnej instalacji: Microsoft SQL Server 2005 - 9.00.4053.00 (X64) 26 maja 2009 14:13:01 Copyright (c) 1988-2005 Microsoft Corporation Developer Edition (wersja 64-bitowa) w systemie Windows NT 6.1 (Kompilacja 7600:)
Począwszy od 2005 r. Dostępna jest funkcja ROW_NUMBER().
SELECT * FROM
(
SELECT r.*, ROW_NUMBER() OVER (ORDER BY SomeField ASC) AS RowNum
) sorty
WHERE RowNum = 5
trochę więcej/inna niż ty prosiłeś, ale tutaj jest kilka rzeczy: Powiedzmy, że masz potrzebę znalezienia n-tego wiersza z jednej tabeli, w określonej kolejności datetime i wstawić wartość z nim do inna tabela, jeśli jej unikalny identyfikator nie znajduje się już w drugiej tabeli. Otrzyma wartość z pierwszego n-tego wiersza tabeli. myuniquecol jest identifer/col identyfikujący grupę rzędami, które mają taką samą wartość w pierwszej tabeli, które posiadają wartości mydatetime
(SELECT TOP 1 mycol FROM
(SELECT TOP 5 * FROM mytable
WHERE mytable.myuniquecol NOT IN (select myuniquecol from myothertable)
AND mytable.myuniquecol = myuniquecol
ORDER BY myuniquecol asc, mydatetime desc
) AS me
ORDER BY myuniquecol desc, mydatetime asc
) AS mycolnew
Jest to użyteczne, aby znaleźć n-tego wiersza w jednej tabeli i włożyć jako n-ty kol w innym stole.
tabela1: myuniquecol, Mycol, mydatetime
Tabela 2: myuniquecol, mycol1, mycol2, mycol3 ...
powinien działać w każdym SQL :)
UWAGA: mojatabela zawiera kolumnę o nazwie Mycol
EDIT: wyjął kilka rzeczy, ponieważ SQL Server ograniczeń na szczycie
FYI, zrobił to w ten sposób, ponieważ pytanie było nieco niejednoznaczne. –
Można użyć funkcji Common Table Expression (CTE) i funkcji okna, ROW_NUMBER() (zgodność z SQL 2005), aby rozwiązać problem.
Załóżmy, że nazwa tabeli jest tableOne i ma trzy kolumny (col1, col2, Col3)
się, aby definicja pełna, trzeba określić kolejność, w odniesieniu do którego chcesz wierszy numerowanych . Poniższe skrypty powinny pomóc ci uzyskać n-ty rząd tabeli.
--table definition
create table tableOne
(
col1 varchar(10)
,col2 varchar(10)
,col3 varchar(10)
)
go
-- sample data creation
insert into tableOne VALUES ('c11','c12','c13')
insert into tableOne VALUES ('c21','c22','c23')
insert into tableOne VALUES ('c31','c32','c33')
insert into tableOne VALUES ('c41','c42','c43')
insert into tableOne VALUES ('c51','c52','c53')
insert into tableOne VALUES ('c61','c62','c63')
go
-- obtaining nth row using CTE and Window Function
WITH NthRowCTE AS
(
SELECT
ROW_NUMBER() OVER (ORDER BY col1) AS RNum
, *
FROM tableOne
)
SELECT * FROM NthRowCTE WHERE RNum = 5
GO
Z CTE i funkcja okna, masz pełną swobodę do danych wyjściowych, jak chcesz.
Jeśli używasz SQL Serever 2005 lub nowszego możesz użyć funkcji CTE.
W przeciwnym wypadku można skorzystać z tej prostej kwerendy
SELECT TOP 1 EmpID
FROM (SELECT TOP 5 EmpID FROM EmpMaster ORDER BY Salary) T
ORDER BY Emp DESC
SIMPLE
- zwraca pierwszy rekord
select * from tytułów WHERE 1 = (select count (title_id) z tytułów b gdzie a.title_id> = b.title_id)
- powrót drugi rekord i tak dalej select * from tytułów WHERE 2 = (select count (title_id) z tytułów gdzie a.title_id b> = b.title_id)
- 1. Jak wstawić losowe wartości do tabeli programu SQL Server?
- 2. przenoszenie danych z programu Excel do programu SQL Server tabeli
- 3. MS SQL Server Wiersz Kolumna GUID
- 4. Jak przechowywać rekordy historyczne w tabeli historii w SQL Server
- 5. Jak dodać nowy wiersz tabeli programu ASP.NET, klikając przycisk?
- 6. uzyskać pojedynczy wiersz z tabeli
- 7. Wybierz n losowych wierszy z tabeli programu SQL Server
- 8. Jak wstawić pusty wiersz do tabeli SQL?
- 9. Usuwanie rekordów z tabeli programu SQL Server bez kursora
- 10. Pomiń pierwszy wiersz w SQL Server 2005?
- 11. Wyświetlenia indeksowane programu SQL Server
- 12. Alternatywa programu Doradca dostrajania programu SQL Server?
- 13. Narzędzie różnicowe programu SQL Server
- 14. Jak przekonwertować plik .mdf programu SQL Server 2008 do programu SQL Server 2012?
- 15. Jak wywołać procedurę przechowywaną programu SQL Server z programu PowerShell?
- 16. Przechodząc „aktualny” wiersz do funkcji w SQL Server
- 17. Zapytanie o datę utworzenia tabeli SQL Server
- 18. Używanie programu SQL Server jako kolejki DB z wieloma klientami
- 19. Jak uzyskać wartości parametrów dla zapytania SQL Server w programie SQL Server Profiler
- 20. Wstawianie wielu wierszy do tabeli programu SQL Server przy użyciu zmiennej tabeli
- 21. Zapytanie rekurencyjne SQL Server
- 22. Jak uzyskać wszystkich przodków węzła przy użyciu hierarchyid programu SQL Server 2008?
- 23. SQL Server: Zdobądź klucz podstawowy tabeli za pomocą kwerendy SQL
- 24. Jak dodać podział wiersza w procedurze składowanej programu SQL Server?
- 25. Importowanie wielu plików CSV do programu SQL Server z folderu
- 26. Określanie wersji programu SQL Server z ADO.NET
- 27. Zmiana trybu odzyskiwania programu SQL Server 2008
- 28. dowolny limit liczby połączeń programu SQL Server?
- 29. Poziom zgodności programu SQL Server 2008
- 30. Przywracanie kopii zapasowej programu SQL Server 2000 na serwerze SQL Server 2012
chcesz kwerendy SQL, która zwraca wartości w kolumnie zdefiniowanej jako piąta kolumna w tej tabeli? Taki, że gdyby wstawić kolejną kolumnę jako drugą kolumnę, wypchnąć kolejne kolumny w dół, to zapytanie, które omawiamy, zwróci następnie to, co poprzednio było czwartą kolumną? –
Proszę wyjaśnić swoje pytanie. Szukasz piątego wiersza lub piątej kolumny? –
Ponieważ tytuł pytania brzmi "Jak uzyskać n-tego wiersza w tabeli SQL Server" Myślę, że jest całkiem jasne, że chce piąty wiersz, a nie piąta kolumna. – mwigdahl