SELECT * FROM (
SELECT ID,VALUE FROM TABLE1
UNION 
SELECT ID,VALUE FROM TABLE2 )
GROUP BY ID,VALUE

解决方案 »

  1.   

    好多分啊!楼上是直接从数据库中查询也可以用arraylist来运算处理
      

  2.   

    如果在DATASET中操作没有什么简单的方法
    只有从DataSet1或DataSet2中边历找到ID的值然后在DataSet2或DataSet1中找到该行并把其中对应字段的值进行运算
    可以考虑在数据库取数据时进行运算
      

  3.   

    不能用sql语句解决
    需要遍历计算
      

  4.   

    to thinkingforever
       现在DataSet的数量不定,每个DataSet的纪录条数也有可能很多,这么遍历,效率肯定很低。
    大家有没有除了遍历以外更好的办法
      

  5.   

    思归倒是有一个回复是,如何在两个DataTable 之间进行Inner join我忘了链接了,可惜可能有所帮助
      

  6.   

    不过效率,也不会比循环多多少吧see
    http://www.cnblogs.com/elevenwolf/archive/2004/08/12/32512.aspx
      

  7.   

    sorry ,上面的链接好像文不对题 -_-#
      

  8.   

    http://blog.csdn.net/amomi/articles/136952.aspx
    http://www.pconline.com.cn/pcedu/empolder/net/0312/255517.html
    建议楼主去搜索一下关于DataTable + SQL 之类的信息
    看看能不能提供一些帮助
    就是在内存表里面实现SQL
      

  9.   

    to  brightheroes(闭关|那一剑的风情)
       谢谢先!
       我现在的问题的情况可能是DataSet1+DataSet2-DataSet3*DataSet4/DataSet5
       而且这几个DataSet的关系又不固定,不能merge到一个table中去计算啊
       郁闷ing 
      

  10.   

    定义一个自己的DataSet类,重载运算符。你看看下面我写的吧,只是简单的相加,没有按ID一样的相加,你可以自己改改,有问题联系:MSN: [email protected] 
    public class MyDataset: DataSet 
    {
    public static MyDataset operator+(MyDataset fv,MyDataset sv)
    {
    MyDataset mydset = new MyDataset();
    if(fv.Tables[0].Rows.Count==sv.Tables[0].Rows.Count)
    {

    DataTable dt = fv.Tables[0].Clone();
    for(int i=0;i<fv.Tables[0].Rows.Count;i++)
    {
    DataRow row = dt.NewRow();
    row[0] = fv.Tables[0].Rows[i][0];
    row[1] = Convert.ToInt32(fv.Tables[0].Rows[i][1])+Convert.ToInt32(sv.Tables[0].Rows[i][1]);
    dt.Rows.Add(row);
    }
    mydset.Tables.Add(dt);
    }
    return mydset;
    }
    }
      

  11.   

    http://support.microsoft.com/kb/326080/EN-US/
      

  12.   

    没办法,写了一个遍历的,效率不知怎样。
    DataSet ds1 = new DataSet();
    DataSet ds2 = new DataSet();
    DataView dv1 = ds1.Tables[0].DefaultView;
    DataView dv2 = ds2.Tables[1].DefaultView;
    int count = dv1.Count;
    int flag=0;//dv2的计数器
    int countdv2=dv2.Count;
    for(int i=0;i<count;i++)
    {
    if(flag>countdv2) break;//dv2的数据已遍历完毕
    dv1.AllowNew=true;
    dv1.AllowEdit=true;
    int id1=Int32.Parse(dv1[i]["id"].ToString());
    int id2=Int32.Parse(dv2[flag]["id"].ToString());
    if(id1==id2)
    {
    dv1[i].BeginEdit();
    dv1[i]["value"]=Int32.Parse(dv1[i]["value"].ToString()) +Int32.Parse(dv2[flag]["id"].ToString());
    dv1[i].EndEdit();
    }
    else 
    {
    DataRowView newrow = dv1.AddNew();
    newrow["id"]=id2;
    newrow["value"]=dv2[flag]["id"].ToString();
    newrow.EndEdit();
    }
    flag++;
    }
    if(flag>count)//将dv2中剩下的数据添加过来
    {
    for(int i=flag;i<countdv2;i++)
    {
    DataRowView newrow = dv1.AddNew();
    newrow["id"]=id2;
    newrow["value"]=dv2[flag]["id"].ToString();
    newrow.EndEdit();
    }
    }