【问题标题】:Merge two table in new table with random records of two tables - c#用两个表的随机记录合并新表中的两个表 - c#
【发布时间】:2016-08-14 19:59:35
【问题描述】:

我在 sql 中有 2 个表,其中 1 列,我想将数据合并到一个具有 2 列的新表中,

  • 第一个表只有一行,第二行应该是“V86”
  • 第二张桌子有一行,第二行应该是'V2T'

我需要从第一个表中合并新表 328 中的 700 条记录和第二张表中的 372 条记录。应该有2组,每组350条,第一个表有164条记录,第二张表有186条记录,记录的随机性很好。

我写了这段代码,第一批 350 条记录具有很好的随机性,但第二批 350 条记录有 1-164 条“V86”记录和 165-350 条“V2T”[无随机性]

它运行两次的相同循环,我试过但无法弄清楚。谁能帮帮我?

private void QUEMerge()
{
    DataTable ae50braQUE = aeBL.AE50BraQUE();
    DataTable ae50SwimQUE = aeBL.AE50SwimQUE();

    int rowAE50BraQue = 0;
    int rowAE50SwimQue = 0;

    int a = 0;
    int b = 0;

    int ttlque = 0;

    for (int i = 0; i < 2; i++)
    {
        int temp1 = 0;
        int temp2 = 0;

        for (int j = 0; j < 350; j++)
        {
            rowAE50BraQue = rowAE50BraQue + 3;
            rowAE50SwimQue = rowAE50SwimQue + 4;

            for (; a < rowAE50BraQue; a++)
            {
                if (temp1 >= 164 || ttlque >= 700)
                {
                    break;
                }
                DataRow dr = ae50braQUE.Rows[a];
                aeBL.MergeQUE(dr["Coupon"].ToString(), "V86");
                temp1++;
                ttlque++;
            }

            for (; b < rowAE50SwimQue; b++)
            {
                if (temp2 >= 186 || ttlque >= 700)
                {
                    break;
                }
                DataRow dr = ae50SwimQUE.Rows[b];
                aeBL.MergeCouponsQUE(dr["Coupon"].ToString(), "V2T");
                temp2++;
                ttlque++;
            }
        }
    }
}

【问题讨论】:

    标签: c# asp.net sql-server merge


    【解决方案1】:

    这是我的固定工作代码..

    private void QUEMerge()
    {
            DataTable ae50braQUE = aeBL.AE50BraQUE();
            DataTable ae50SwimQUE = aeBL.AE50SwimQUE();         
    
            int x = 0;
            int y = 0;
    
            //int ttlque = 0;
    
            for (int i = 0; i < 2; i++)
            {
                int rowAE50BraQue = 0;
                int rowAE50SwimQue = 0;
    
                int a = 0;
                int b = 0;
    
                int temp1 = 0;
                int temp2 = 0;
    
                for (int j = 0; j < 350; j++)
                {
                    rowAE50BraQue = rowAE50BraQue + 3;
                    rowAE50SwimQue = rowAE50SwimQue + 4;
    
                    for (; a < rowAE50BraQue; a++)
                    {
                        if (temp1 >= 164)
                        {
                            break;
                        }
                        DataRow dr = ae50braQUE.Rows[x];
                        aeBL.MergeCouponsQUE(dr["Coupon"].ToString(), "V86");
                        temp1++;
                        x++;
                        //ttlque++;
                    }
    
                    for (; b < rowAE50SwimQue; b++)
                    {
                        if (temp2 >=186)
                        {
                            break;
                        }
                        DataRow dr = ae50SwimQUE.Rows[y];
                        aeBL.MergeCouponsQUE(dr["Coupon"].ToString(), "V2T");
                        temp2++;
                        y++;
                       // ttlque++;
                    }
                }
            }
    

    【讨论】:

      【解决方案2】:

      你可以只使用 t-sql 来做到这一点:

      WITH cte as
      (
          SELECT a.a, b.b, ROW_NUMBER() OVER(PARTITION BY a.a ORDER BY NEWID()) as rn
              FROM (VALUES ('x'),('y'),('z')) AS a(a)
              CROSS JOIN (VALUES ('a'),('b'),('c'),('d')) as b(b)
      )
      --INSERT INTO NewTable(a, b)
          SELECT TOP(5) a, b
              FROM cte
              WHERE rn in (1,2)
              ORDER BY NEWID();
      

      a - table1, b - table2, TOP(5) - 在你的情况下是TOP(700)

      附言这个查询是完全独立的,所以你可以运行它来测试结果

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-27
        相关资源
        最近更新 更多