如:
表ABC里面3条记录:
1 1 1000
1 2 500
1 3 100
问:该如何随机判断字段1000 500 100 越大越获取?简单的说,我想做个电子刮奖,有3个记录是奖品,后面的1000 500 100是概率,数值越大,挂出的几率越大

解决方案 »

  1.   

    select ID, max(概率)
    from t
    group by ID
      

  2.   

    with t as (
    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才够。这张表可以是系统表,也可以是自己建的表。
      

  3.   


    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