SELECT * FROM (
SELECT ID,VALUE FROM TABLE1
UNION
SELECT ID,VALUE FROM TABLE2 )
GROUP BY ID,VALUE
SELECT ID,VALUE FROM TABLE1
UNION
SELECT ID,VALUE FROM TABLE2 )
GROUP BY ID,VALUE
解决方案 »
- 设置DataGrid中列的tooltip
- 登陆窗口问题(可用分只10分)
- 请教字符数组操作
- 上传问题
- System.ComponentModel.Component默认的Designer是哪个类?
- C# HttpWebRequest。读取不到网站完整Cookie
- 继承CollectionBase的类绑DataGrid,怎样实现增加删除?
- 问一个关于类和方法的问题:)
- 求助(急)
- 在线等待,急,关于SqlDataAdapter问题?
- richtextbox的问题!知道的朋友帮一下忙!
- 寻找绿色(Copy至本地硬盘即可用)工具:实现将48*48或32*32的ICO图标文件转为16*16的ICO图标文件!up者有分
只有从DataSet1或DataSet2中边历找到ID的值然后在DataSet2或DataSet1中找到该行并把其中对应字段的值进行运算
可以考虑在数据库取数据时进行运算
需要遍历计算
现在DataSet的数量不定,每个DataSet的纪录条数也有可能很多,这么遍历,效率肯定很低。
大家有没有除了遍历以外更好的办法
http://www.cnblogs.com/elevenwolf/archive/2004/08/12/32512.aspx
http://www.pconline.com.cn/pcedu/empolder/net/0312/255517.html
建议楼主去搜索一下关于DataTable + SQL 之类的信息
看看能不能提供一些帮助
就是在内存表里面实现SQL
谢谢先!
我现在的问题的情况可能是DataSet1+DataSet2-DataSet3*DataSet4/DataSet5
而且这几个DataSet的关系又不固定,不能merge到一个table中去计算啊
郁闷ing
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;
}
}
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();
}
}