我正在尝试使用该NEWID()
函数将源表中的数据插入到临时表中,以便从源表中获得(相当)随机选择的行。
查看下面的代码,我将所需的数据插入到临时表中#x
,并在我从中选择的第 1 点#x
处,它以随机顺序返回数据。
但是,在第 2 点,我正在缩小数据范围#x
(我累积行直到达到一定数量),SELECT 不再返回随机行 - 它从表的开头按顺序返回行。
DROP TABLE IF EXISTS #x
CREATE TABLE #x (Id INT, Commodity VARCHAR(3), Quantity FLOAT, RowNum INT, TotalQuantity FLOAT)
INSERT INTO #x (id,commodity,quantity,rownum,totalquantity)
SELECT
i.id, i.commodity, i.quantity, ROW_NUMBER() OVER (ORDER BY i.id), SUM(i.quantity) OVER (ORDER BY i.id RANGE UNBOUNDED PRECEDING)
FROM inventory i
WHERE .........
.........
ORDER BY NEWID()
SELECT * FROM #x -------- **POINT 1**
DECLARE @y INT = (SELECT MIN(rownum) AS minrownum FROM #x WHERE totalquantity >= @tonnes)
SELECT #x.id, #x.commodity, #x.quantity, #x.rownum, #x.totalquantity FROM #x
WHERE #x.rownum <= @y
ORDER BY NEWID() -------- **POINT 2**
关于我所缺少的任何想法?
谢谢。