簡體   English   中英

Sql Server 2008視圖中的ORDER BY

[英]ORDER BY in a Sql Server 2008 view

我們的數據庫中有一個ORDER BY的視圖。 現在,我意識到觀點通常不會排序,因為不同的人可能會將它用於不同的事情,並希望它有所不同。 然而,該視圖用於需要特定訂單的非常特定的用例。 (這是足球聯賽的球隊排名。)

該數據庫是Windows Server 2003 R2上的Sql Server 2008 Express,v.10.0.1763.0。

視圖定義如下:

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

它返回:

GENDER, TEAMYEAR, CODE, TEAMID, CLUB, NAME,  
WINS, LOSSES, TIES, GOALS_FOR, GOALS_AGAINST,  
DIFFERENTIAL, POINTS, FORFEITS, RANKING

現在,當我對視圖運行SELECT時 ,它按GENDER,TEAMYEAR,CODE,TEAMID命令結果。 請注意,它是按TEAMID而不是POINTS排序,因為order by子句指定。

但是,如果我復制SQL語句並完全按照新查詢窗口中的方式運行它,它將按照ORDER BY子句的指定正確排序

SQL Server 2005在設計上忽略了TOP 100 PERCENT。

請嘗試使用TOP 2000000000。

現在,我會嘗試找一個參考資料......我參加了由Itzak Ben-Gan提出的研討會

發現一些......

Kimberly L. Tripp

“前100%的秩序被認為是有害的”

在這種特殊情況下,優化器會識別TOP 100 PERCENT限定所有行,並且根本不需要計算。

從不保證具有ORDER BY子句的視圖返回的行的順序。 如果需要特定的行順序,則必須指定從視圖中選擇的位置。

請參閱本書在線條目頂部的注釋。

只需使用:

頂級(99)百分比

要么

“Top(比你的數據行多了1000多倍,比如24682468123)”它有效! 就試一試吧。

在SQL Server 2008中,在使用TOP 100 PERCENT的視圖中忽略ORDER BY。 在SQL Server的早期版本中,只有在使用TOP 100 PERCENT時才允許ORDER BY,但從未保證完美的訂單。 然而,許多人認為完美的訂單是有保證的。 我推斷微軟不想誤導程序員和DBA相信使用這種技術有保證的訂單。

這里可以找到這種不准確性的優秀對比示例......

http://blog.sqlauthority.com/2009/11/24/sql-server-interesting-observation-top-100-percent-and-order-by

哎呀,我剛才注意到這已經回答了。 但無論如何,查看比較示范值得一看。

微軟解決了這個問題。 你有補丁你的SQL服務器

http://support.microsoft.com/kb/926292

我找到了另一種解決方案。

我最初的計划是創建一個“sort_order”列,以防止用戶執行復雜的排序。

我使用了一個窗口函數ROW_NUMBER。 在ORDER BY子句中,我指定了我需要的默認排序順序(就像它在SELECT語句的ORDER BY中一樣)。

我得到了幾個積極的結果:

  1. 默認情況下,數據以我最初預期的默認排序順序返回(這可能是由於窗口函數必須在分配sort_order值之前對數據進行排序)

  2. 其他用戶可以選擇以其他方式對數據進行排序

  3. sort_order列用於非常特定的排序需求,如果用戶使用重新排列行集的任何工具,用戶可以更輕松地對數據進行排序。

注意:在我的特定應用程序中,用戶通過Excel 2010訪問視圖,默認情況下,數據按照我的希望呈現給用戶,無需進一步排序。

希望這有助於那些有類似問題的人。

干杯,瑞恩

在數據庫上運行探查器跟蹤,並查看查詢視圖時實際運行的查詢。

您還可以考慮使用存儲過程從視圖中返回數據,並針對您的特定用例正確排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM