2010-01-06 30 views
9

Utworzono widok sql i muszę posortować wyniki selekcji, używając ORDER BY na 4 polach, ale otrzymuję komunikat, że ORDER BY nie może być używany w widokach, chyba że Używam TOP. Czy ktoś może wyjaśnić, dlaczego TOP jest potrzebny, i czy ktoś ma obejście do sortowania w widoku sql?Jak sortować w widoku sql

Dzięki.

Odpowiedz

-1

przypadku korzystania z SQL Server, można zrobić

select top 100 percent * 
from MyTable 
order by MyColumn 

Oczywiście nie należy używać * w widoku, po prostu stosować go tutaj dla zwięzłości.

+3

od 2005 optymalizator sql usuwa to zamówienie, więc to nie działa! bądź ostrożny z tym. –

+0

Czy masz referencje? – RedFilter

+1

pewnie! bezpośrednio z zespołu optymalizatora zapytań serwera sql: http://blogs.msdn.com/queryoptteam/archive/2006/03/24/560396.aspx –

17

Nie trzeba sortować widoku. rzutem jest jak stół, więc rozwiązać to po wybraniu z niego:

select * from yourView order by yourColumns 
+2

* * poprawna odpowiedź – gbn

5

Nie ma gwarancji, wyjście z widoku zostaną uporządkowane

Tylko kolejności najbardziej oddalonych dotyczy zestawów wyników : nie żadnych wewnętrznych. Więc tylko to ORDER BY można zagwarantować pracy:

SELECT col1, col2, FROm MyView ORDER BY col2 

Można dodać go do widoków lub tabel pochodnych i zmusza „intermediate materialisation” ponieważ wyniki mają być zamawiane. Jednak dla SQL Server 2005 i nowszych, trzeba użyć TOP 2000000000 nie TOP 100 PERCENT (z wyjątkiem tego HF że Daniel Vassallo wspomnianym!)

Ktoś będzie użyciu widoku z innym celu, który wewnętrznie w pewnym momencie zbyt.

0

Można spróbować:

CREATE VIEW View_Products 
AS 
SELECT ProductID, ProductName, UnitPrice, CreateDate FROM Products 
Order by CreateDate DESC 
OFFSET 0 ROWS 
0

Czy tworzenie indeksu na kolumnie, z którą zamierzasz posortować wyświetlić pomoc?