2010-03-05 36 views
1

在SQL服務器,我可以說:如何獲得SQL服務器中選擇查詢的底部50%?

Select top 50 percent 

我怎麼能說下50%?

編輯 - 一個有趣的問題的緣故,如果我們假設他有一個主鍵的表,但希望下50%上升主鍵順序排列。什麼是實現這一目標的最有效方式?

回答

11

爲什麼不只是改變排序順序,並保持TOP。這不會完成同樣的事情嗎?

17
SELECT * FROM 
    (
     SELECT TOP 50 PERCENT * 

     FROM [Table] 

     ORDER BY [Field] DESC 
    ) 
    ORDER BY [Field] ASC 
+3

滑稽你有沒有信用提供解決方案,它返回下半部分的原始排序順序+1從我 – mjv 2010-03-05 17:21:35

+0

+1提供解決方案擴展我在*之前添加的問題* :-) – Cruachan 2010-03-05 17:23:43

+0

50分鐘後:哇!答案彌補了時間浪費;-),現在有7名代表現在......很好地「付費」。有趣的是看到這一切的動態。 – mjv 2010-03-05 18:13:34

1

如說你的問題在技術上是沒有意義的,因爲如果沒有BY子句中返回的數據是不確定的(實際上大多數的數據庫將在主鍵順序返回,或訂單的,如果你沒有一個然後在插入順序,但不能保證)

假設然而,你有一個命令的條款,但只是沒有包括它,只會使用DESC而不是ASC。

0

我不知道這是否會工作:

SELECT * FROM <table> EXCEPT TOP 50 PERCENT...; 

而且我敢肯定,這樣的事情就太OK:

SELECT * FROM <table> WHERE (ID NOT IN (SELECT TOP 50 PERCENT ...)); 

只是檢查語法,因爲我纔剛剛開始學習SQL和如果不先修改一萬次,不能形成正確的查詢;)

1

另一種選擇可能是:

Select * From (
    Select NTILE(2) Over (Order by Quantity Desc) as HalfNumber 
    From Table1) as NtileTable 
where HalfNumber = 1 

然後,您可以根據需要動態更改數據的劃分。

Check this out.

0
SELECT * FROM (
     SELECT TOP 50 PERCENT * 
     FROM [Table] 
     ORDER BY [Field] DESC 
    ) 
ORDER BY [Field] ASC 

當表包含的記錄的不均勻量不正常運行的。中間的那個將在兩個結果集中。

這在另一方面正常工作

SELECT * FROM <table> EXCEPT TOP 50 PERCENT...; 

給予好評的mingos :)

downvote爲user151323 :(