select distinct A.id,A.time,A.Name,b.address from tablea as A,tableb as B where
******** // 可消除重复
A.id=B.id
******** // 可消除重复
A.id=B.id
解决方案 »
- c#抓取的网页怎么自动判断编码
- 界面刷新问题,每分愿意帮忙的进
- 老师管理对应的班级
- 在网上下了个C#Primer中文版,没有6 7两章,谁有全的发我一份,或告诉地址!
- 请问2个线程在插入数据库时候比单线程一定快么?
- c#怎么使用TB_GETITEMRECT?
- datagrid 中的某些cell需要进行更新,怎么操作
- SQL语句有问题...高手请帮忙!!!
- 不用dataview如何对dataset.table[0]中的各行按某一列值的大小排序??
- 问题:我有一个可执行文件,运行它打开一个窗体,我可不可以写一个C#程序,运行的时候,同时运行那个可执行文件,但是将其窗体隐藏!
- 关于hashtable的values的显示顺序
- 类名为一变量,如何得到他的实例呢?
不过很遗憾,distinct是删除重复纪录,而我现在是某一列是重复的,但纪录不是重复的,这是因为两个表有一对多的关系,所以用distinct是不行的。
{
String columnValue = dr[0][column].ToString(); // 取得重复的column
int i = 1;
foreach( DataRow dr2 in dataSet.Tables[0].Rows )
{
if( dr2[0][column].ToString() == columnValue ) // 删除重复的column
{
i++;
if( i > 1 )
{
// 删除这个重复的column
}
}
}
}
你提供的思路,我很早就试过了,但是不知道什么原因,删不干净。
下面是我的关键代码
int k = dsTmp.Tables["tbV"].Rows.Count;
string deleteString = string.Empty;
char[] barr = {','};
for (int i = 0,fi = 1;i < k-1;i++,fi++)
{
if (dsTmp.Tables["tbV"].Rows[i]["ID"].ToString() == dsTmp.Tables["tbV"].Rows[fi]["ID"].ToString())
{
deleteString += i + ",";
}
}
if (deleteString.Length > 0)
{
deleteString = deleteString.Substring(0,deleteString.Length-1);
string[] arr = deleteString.Split(barr);
foreach(string n in arr)
{
int l = Convert.ToInt32(n);
dsTmp.Tables["tbV"].Rows[l].Delete();
}
}
请帮忙看看.
to csdnshao(飞雪连天) :
如果你说的是在sql语句中加distinct的话。
建议你先去试一下distinct。
你这不存在重复列啊搞不清楚你的问题,问的有点怪
你可以先试试我得再说,不会有删不干净的。注意一下i。可以设个断点看看~~
打个比方说就是一个A.Name可以有好几个b.address
我现在只要取最后一个b.adress(假设他们用Name来关联)
这样就会有好几条记录了,而记录是不重复的,但是对于A.Name来说,却是重复的。
明白我的意思吗?
id time name address
1 1888-02-02 a b
1 1888-02-02 a c
2 1999-02-02 t f
记录没有重复的,但是前两条记录在前面的字段是重复的。 Do you understand?
string s = "select A.id,A.time,A.Name,b.address from tablea as A,tableb as B where A.id=B.id order by a.id asc";//表a何表b是一对多的关系。string strID="";
foreach( DataRow dr in dataSet.Tables[0].Rows )
{
if(strID!=dr[0][column].ToString()); // 取得重复的column
{
//显示数据
strID=dr[0][column].ToString();
}
else
{
// 删除这个重复的column
}
}
int count = dv.Count;
for ( int i=0; i < count; i++ )
{
DataRow dr;
dr = dv[i];
//假设第3列为重复列,Temp为第三列的名
string Temp = dr.ItemArray[2].ToString();
dv.RowFilter = "Temp='" + Temp + "'";
if ( dv.Count > 1)
dv.Delete( 0 );
dv.RowFilter = "";
}
{
String columnValue = dr["id"].ToString(); // 取得id的值
int i = 1;
foreach( DataRow dr2 in dataSet.Tables[0].Rows ) // 在dataset里在一次遍历
{
if( dr2[“id”].ToString() == columnValue ) // 如果id相等
{
i++; // 第一个保留
if( i > 1 ) // 删除重复的
{
// 删除这个重复的column
}
}
}
}
我试了一下你的方法:
foreach( DataRow dr in dsTmp.Tables["tbV"].Rows )
{
String columnValue = dr["ClientName"].ToString(); // 取得重复的column
int i = 1;
foreach( DataRow dr2 in dsTmp.Tables["tbV"].Rows )
{
if( dr2["ClientName"].ToString() == columnValue ) // 删除重复的column
{
i++;
if( i > 1 )
{
// 删除这个重复的column
dr2.Delete();
}
}
}
}
报错位:不能通过已删除的行访问该行的信息。
if( dr2["ClientName"].ToString() == columnValue ) // 删除重复的column
select * from TbName GROUP BY name,address
如果用你的方法,在不知道那一列是重复列的情况下,如何执行。我现在的问题,就是在取出重复列的时候不能全取出来,总要漏掉一些。
而且,很奇怪,在纪录数为各位数的时候,基本上不会漏掉,
但纪录一多,两位数的时候就开始漏。
可以试试group by
引“打个比方说就是一个A.Name可以有好几个b.address
我现在只要取最后一个b.adress(假设他们用Name来关联)
这样就会有好几条记录了,而记录是不重复的,但是对于A.Name来说,却是重复的。”:要允许一定的数据冗余,你应该这么来看待,记录是不重复的,某几列的记录中其中的一列有重复这是很正常的,作为一对多关系肯定会存在这样的情况,而不是什么数据冗余问题
不明白你为什么一定要做这个删除?
int j = dataSet.Tables[0].Rows.Count;
for( int i = 0; i < j; i++ )
{
string testValue = dataSet.Tables[0].Rows[i]["name"].ToString();
int m = 0;
foreach( DataRow dr2 in dataSet.Tables[0].Rows )
{
String test1 = dr2["name"].ToString();
if( dr2[1].ToString() == testValue )
{
m++;
if( m > 1 )
{
dr2.Delete();
j--;
continue;
}
}
}
dataSet.AcceptChanges();
}
另外,对上面说我表设计不合理的同志:
感谢各位的热心看帖,不过风凉话就不必说了。我之所以要删出,是因为客户要求对多个表查询在一个datagrid显示,但在某种情况下不允许某个表有重复纪录,同时因为我这个页面需要打印,所以只能在ds中修改。
dr2[1]值得是什么意思?
感谢各位的帮忙。尤其是maotin。
马上揭帖