Stored-Procedures
根據列值返回行數
我們正在為客戶管理抽獎活動,其中我們有一個與參賽者相關的 GUID 以及參賽者獲得的參賽作品數量。我希望能夠根據與參賽作品數量相對應的獲勝機會來抽獎。
GUID | Entries -------------- 1 | 1 2 | 5 3 | 2 4 | 7
所以結果將是:
GUID ---- 1 2 2 2 2 2 3 3 4 4 4 4 4 4 4
基本上我計劃將結果放在電子表格中,然後使用隨機數生成器在 1 和 n 之間選擇一個行號,其中 n 是條目總數。但當然,如果有一種方法可以輕鬆地以程式方式選擇獲勝者,我會全神貫注(或視情況而定)。
提前致謝。
出於興趣,這裡是 SQL Server 2016 的解決方案,它使用內置的
$$ pseudo $$隨機數生成器為您挑選獲勝者。 一、數據:
CREATE TABLE #t (ID int, Entries int) INSERT #t VALUES (1,1), (2,5), (3,2), (4,7)
然後程式碼:
DECLARE @r float = RAND() SELECT TOP 1 ID, @r FROM ( SELECT ID, Entries, SUM(Entries) OVER(ORDER BY ID) / CONVERT(float,SUM(Entries) OVER()) AS RunningFraction FROM #t ) RF WHERE RunningFraction > @r ORDER BY ID
您可以跳過變數聲明而只使用
WHERE RunningFraction > RAND()
,但這種格式更容易測試功能。