来自特定sql表的随机函数

时间:2017-01-18 07:46:09

标签: c# sql-server winforms random

我必须用c#创建一个彩票计划。

我使用的表是3.

第一张表:Clients

Client_num   Client_Name    Client_ID

第二张表:Prize

 Prize_Name  Prize_ID

第3表:Report

Prize_ID   Client_ID  ID_Number   --(who can be not unique).

我的任务是创建一个可视化客户端数量的表单(1到435333之间,每月客户端数量不同,因为我是根据特定条件生成的)。

为此我在我的代码中使用select查询 - 谁从表Clents返回MAX ID。

除了客户端数量我必须可视化奖品名称,这两行必须在报告中可视化。 我的问题是 - 如何创建1到435533之间的随机数,因为这些数字是文本框中“客户”表的客户端数 - 客户端编号。

以下是代码:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        Random Lottery = new Random();

        SqlConnection con = new SqlConnection("Data Source=sqlsrvr;Initial Catalog=lottery;Integrated Security=True;");
        con.Open();
        SqlCommand cmd = new SqlCommand("SELECT MAX(id) AS ID FROM clients", con);
        cmd.ExecuteNonQuery();
        con.Close();
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {

    }

    private void textBox3_TextChanged(object sender, EventArgs e)
    {

    }
}

}

2 个答案:

答案 0 :(得分:0)

只需从您的客户表中随机选择50个

SELECT TOP 50 id FROM clients ORDER BY NEWID()

答案 1 :(得分:0)

很难理解你的要求,我试着在下面总结它们,所以如果这不正确那么解决方案也会出错!

要点:

  1. 您有一个客户列表,每个客户都有一个唯一的“客户ID”
  2. 每个月,客户都会参加抽奖以赢取奖品
  3. 选择50名随机客户作为获奖者。
  4. 下个月,之前获胜的客户将被排除在外 来自彩票。
  5. 输入剩余的客户以赢取奖品。
  6. 积分4& 5对问题和解决方案很重要。

    基于此,我建议如下。这只是Pseduo代码,因为您可以在C#或SQL中执行某些部分,因此您可以选择。

    1. 提取以前没有赢过的客户。

      从clients.client_id不在的客户端中选择ROW_NUMBER(),Client_num,Client_Name,Client_ID(从报告中选择client_id);

    2. ROW_NUMBER()(这可能因您的数据库而异)将为每条记录提取一条记录/行号。现在,这是您将在下一部分中使用的新临时顺序唯一ID。

      1. 将它们加载到List<Clients>
      2. 等集合中
      3. 计算您拥有的记录数。这是你的最大值
      4. 根据rownumber随机选取最多50条记录。
      5. 对于其中的每一个,获取client_id并更新数据库中的表以记录获胜者。
      6. 现在你有50位从未赢过的独特获奖者。

        这确实意味着随着时间的推移,可能的获胜者名单将越来越少,直到最终你将获得少于50个可能的获胜者。所以你也必须应对这种可能性。