在SQL服務器,我可以說:如何獲得SQL服務器中選擇查詢的底部50%?
Select top 50 percent
我怎麼能說下50%?
編輯 - 一個有趣的問題的緣故,如果我們假設他有一個主鍵的表,但希望下50%上升主鍵順序排列。什麼是實現這一目標的最有效方式?
在SQL服務器,我可以說:如何獲得SQL服務器中選擇查詢的底部50%?
Select top 50 percent
我怎麼能說下50%?
編輯 - 一個有趣的問題的緣故,如果我們假設他有一個主鍵的表,但希望下50%上升主鍵順序排列。什麼是實現這一目標的最有效方式?
爲什麼不只是改變排序順序,並保持TOP。這不會完成同樣的事情嗎?
SELECT * FROM
(
SELECT TOP 50 PERCENT *
FROM [Table]
ORDER BY [Field] DESC
)
ORDER BY [Field] ASC
如說你的問題在技術上是沒有意義的,因爲如果沒有BY子句中返回的數據是不確定的(實際上大多數的數據庫將在主鍵順序返回,或訂單的,如果你沒有一個然後在插入順序,但不能保證)
假設然而,你有一個命令的條款,但只是沒有包括它,只會使用DESC而不是ASC。
我不知道這是否會工作:
SELECT * FROM <table> EXCEPT TOP 50 PERCENT...;
而且我敢肯定,這樣的事情就太OK:
SELECT * FROM <table> WHERE (ID NOT IN (SELECT TOP 50 PERCENT ...));
只是檢查語法,因爲我纔剛剛開始學習SQL和如果不先修改一萬次,不能形成正確的查詢;)
另一種選擇可能是:
Select * From (
Select NTILE(2) Over (Order by Quantity Desc) as HalfNumber
From Table1) as NtileTable
where HalfNumber = 1
然後,您可以根據需要動態更改數據的劃分。
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 :(
滑稽你有沒有信用提供解決方案,它返回下半部分的原始排序順序+1從我 – mjv 2010-03-05 17:21:35
+1提供解決方案擴展我在*之前添加的問題* :-) – Cruachan 2010-03-05 17:23:43
50分鐘後:哇!答案彌補了時間浪費;-),現在有7名代表現在......很好地「付費」。有趣的是看到這一切的動態。 – mjv 2010-03-05 18:13:34