abbiamo una vista nel nostro database che ha un ordine BY in esso. Ora, mi rendo conto che le viste generalmente non ordinano, perché persone diverse possono usarlo per cose diverse e volere che sia ordinato in modo diverso. Questa vista tuttavia viene utilizzata per un caso d'uso MOLTO SPECIFICO che richiede un determinato ordine. (È la classifica di squadra per un campionato di calcio.)ORDER BY in una vista di SQL Server 2008
Il database è SQL Server 2008 Express, v.10.0.1763.0 su una casella di Windows Server 2003 R2.
La vista è definito come tale:
CREATE VIEW season.CurrentStandingsOrdered
AS
SELECT TOP 100 PERCENT *, season.GetRanking(TEAMID) RANKING
FROM season.CurrentStandings
ORDER BY
GENDER, TEAMYEAR, CODE, POINTS DESC,
FORFEITS, GOALS_AGAINST, GOALS_FOR DESC,
DIFFERENTIAL, RANKING
Restituisce:
GENDER, TEAMYEAR, CODE, TEAMID, CLUB, NAME,
WINS, LOSSES, TIES, GOALS_FOR, GOALS_AGAINST,
DIFFERENTIAL, POINTS, FORFEITS, RANKING
Ora, quando si esegue un SELEZIONARE contro la vista, ordina i risultati per GENERE, TEAMYEAR , CODICE, TEAMID. Si noti che sta ordinando per TEAMID anziché PUNTI come specificato dalla clausola order by.
Tuttavia, se copio l'istruzione SQL ed eseguo esattamente come è in una nuova finestra di query, ordina correttamente come specificato dalla clausola ORDER BY.
Questo è fastidioso! Posso vedere/capire non garantirlo in una VISTA, tipo ... ma dovrebbe almeno funzionare in una funzione valutata a livello di tabella. GRRR. Grazie comunque per la risposta. :) – eidylon