如:
表ABC里面3条记录:
1 1 1000
1 2 500
1 3 100
问:该如何随机判断字段1000 500 100 越大越获取?简单的说,我想做个电子刮奖,有3个记录是奖品,后面的1000 500 100是概率,数值越大,挂出的几率越大
表ABC里面3条记录:
1 1 1000
1 2 500
1 3 100
问:该如何随机判断字段1000 500 100 越大越获取?简单的说,我想做个电子刮奖,有3个记录是奖品,后面的1000 500 100是概率,数值越大,挂出的几率越大
from t
group by ID
select 1 a,1 b, 1000 c
union all
select 1 ,2, 500
union all
select 1 ,3, 100
)
select top 1 t.*
from t cross join IDs s
where s.id<=t.c
order by NEWID()
--其中IDs是一张至少有一列ID的表,这列ID是从1到N 的连续数字。至于有N是多少(当然多多益善),至少要比你的概率总和要大。比如你上面的例子,至少要有1600行ID才够。这张表可以是系统表,也可以是自己建的表。
IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'tba')
BEGIN
DROP TABLE tba
END
GO
CREATE TABLE tba
(
ID INT,
Level INT,
pint INT
)
GO
INSERT INTO tba
SELECT 1, 1, 1000 UNION
SELECT 1, 2, 500 UNION
SELECT 1, 3, 100
GOSELECT TOP 1 *
FROM tba
WHERE CAST(RAND() * 1000 AS INT) < pint
ORDER BY pint ASC