Pracuję na SQL Server 2005, gdzie mam dwie tabele, takie jak ta:
tabela1
ID (Guid) Primarykey
something1 (string)
something2 (string)
I
tabela2
ID (Guid) Primarykey
Table1ID (Guid) is a ForeignKey to Table1
OrderNr (int)
something1 (string)
something2 (string)
Teraz muszę wykonać zapytanie wybierające (które daje mi setki wyników), w zasadzie coś takiego: SELECT * from Table2 where something1 = 'foo' order by Table1ID, OrderNr
Szczególnie ważna jest kolejność według, nie mogę tego zmienić. A instrukcja jest w rzeczywistości o wiele bardziej skomplikowana z dużą ilością złączeń, podselekcji, gdzie i tak dalej, ale nie są one tutaj potrzebne...
Mój problem polega na tym, że potrzebuję specjalnego stronicowania: po prostu zaznacz wszystkie wiersze z 20 różnymi identyfikatorami Table1ID, zaczynając od ID 10 do ID 15. (Oznacza to Chcę stronicowania, ale nie na liczniku wierszy, ale na tych kolumnach o unikalnych wartościach )
Gdybym miał zagnieżdżone select lub wywołanie funkcji, które dodaje iterowany numer instrukcji select, mógłbym użyć pomiędzy, ale jak mogę policzyć unikalne identyfikatory i dodać je do zapytania tam na górze?
Dziękuję za pomoc, Karl
2 odpowiedzi
Właściwie jest to podobne do tego, co powiedział Tim Schmelter, ale nie ROW_NUMBER() OVER (PARTITION BY
... ale DENSE_RANK() OVER (ORDER BY Table1ID) AS rank
Wyjaśnienie: DENSE_RANK robi dokładnie to, czego chcę. Uporządkowuje tabelę, w moim przypadku według Table1ID. Efekt jest taki, że każdy Table1ID ma swój własny numer rangi. Dzięki rank between 10 and 15
dostaję dokładnie to, czego chciałem.
Tank ci, Karl
Możesz użyć ROW_NUMBER
z Partition By
:
WITH CTE AS
(
SELCT Columns, ...
, RN = ROW_NUMBER() OVER (PARTITION BY Table1IDs ORDER BY ID)
FROM dbo.Table
)
SELECT Columns, ...
FROM CTE
WHERE RN BETWEEN 10 AND 15
(lub źle zrozumiałem twoje wymaganie, co nie jest bardzo mało prawdopodobne)
Podobne pytania
Powiązane pytania
Nowe pytania
sql
Structured Query Language (SQL) to język służący do wykonywania zapytań w bazach danych. Pytania powinny zawierać przykłady kodu, strukturę tabeli, przykładowe dane i znacznik używanej implementacji DBMS (np. MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 itp.). Jeśli Twoje pytanie dotyczy wyłącznie konkretnego DBMS (używa określonych rozszerzeń / funkcji), użyj zamiast tego tagu tego DBMS. Odpowiedzi na pytania oznaczone tagiem SQL powinny używać standardu SQL ISO / IEC.