我需要按隨機順序選擇行並返回一個查詢,該查詢以正常順序和相反順序保存行。這是爲了模擬我正在研究的籃球比賽的幻想選秀。以隨機順序選擇行,然後將其顛倒
例如,我需要一個結果集如下:然後再以下四是按相反的順序
team1 1
team2 2
team6 3
team9 4
team9 5
team6 6
team2 7
team1 8
正如你所看到的,第一四支球隊是隨機的。 希望我設法解釋這個問題,如果不是的話 - 請評論,我會進一步解釋。
我需要按隨機順序選擇行並返回一個查詢,該查詢以正常順序和相反順序保存行。這是爲了模擬我正在研究的籃球比賽的幻想選秀。以隨機順序選擇行,然後將其顛倒
例如,我需要一個結果集如下:然後再以下四是按相反的順序
team1 1
team2 2
team6 3
team9 4
team9 5
team6 6
team2 7
team1 8
正如你所看到的,第一四支球隊是隨機的。 希望我設法解釋這個問題,如果不是的話 - 請評論,我會進一步解釋。
你必須「緩存」隨機ORDER BY的結果。
在這段代碼中,如果引用UNION中的CTE,它將被評估兩次,您將有2個不同的順序。熱膨脹係數只是一個宏觀
;WITH cList AS
(
SELECT team, ROW_NUMBER() OVER (ORDER BY NEWID()) AS rn
FROM teams
)
SELECT * INTO #tempresults FROM cList WHERE rn <= @rn --or however many
SELECT *, rn FROM #tempresults
UNION ALL
SELECT *, (2 * @rn) - rn FROM #tempresults
ORDER BY rn
複製行很容易用一個虛擬交叉連接(like this),但是這需要排序,並通過中間結果rownumbering了。我不認爲這可以在一個SQL語句中完成
你可以使用這樣的查詢:
select top(10) teamname, NewId() as Random
from teams
order by Random
這會從數據庫返回的前十名隨機團隊。然後你可以用一些代碼來反轉它。
:)「一些代碼」是我正在尋找的實際... – Faruz 2011-01-09 16:10:13
我認爲iraklis意味着你不會在SQL中這樣做,所以'一些代碼'將在您的程序中,其中您沒有提供該語言;) – Nanne 2011-01-09 16:14:41