【求助】如何获取DataTable表中,去除所有重复项之后的数据,注意:重复的数据不要保留第一个,直接都删除掉

naruto1126 2013-11-28 03:06:52
具体实例来说吧:


DataTable SourceDT = new DataTable();
SourceDt.columns.Add("Id",System.Type.GetType("System.String"));
SourceDt.columns.Add("Name",System.Type.GetType("System.String"));
SourceDt.columns.Add("Age",System.Type.GetType("System.Int32"));
SourceDt.columns.Add("Sex",System.Type.GetType("System.String"));

sourceDT.Rows.Add(new object[] { "10001", "李一", 24, "男" });
sourceDT.Rows.Add(new object[] { "10001", "王二", 23, "男" });
sourceDT.Rows.Add(new object[] { "10001", "孙三", 24, "女" });
sourceDT.Rows.Add(new object[] { "10002", "李四", 23, "男" });
sourceDT.Rows.Add(new object[] { "10002", "王五", 24, "女" });
sourceDT.Rows.Add(new object[] { "10003", "冯六", 25, "男" });
sourceDT.Rows.Add(new object[] { "10003", "陈七", 22, "女" });
sourceDT.Rows.Add(new object[] { "10003", "刘八", 20, "女" });
sourceDT.Rows.Add(new object[] { "10004", "周九", 26, "男" });
sourceDT.Rows.Add(new object[] { "10005", "周十", 21, "女" });
sourceDT.Rows.Add(new object[] { "10006", "孙A", 22, "女" });
sourceDT.Rows.Add(new object[] { "10007", "邹B", 21, "女" });
sourceDT.Rows.Add(new object[] { "10008", "王C", 25, "男" });


结构:SourceDT
Id Name Age Sex
10001 李一 24 男
10001 王二 23 男
10001 孙三 24 女
10002 李四 23 男
10002 王五 24 女
10003 冯六 25 男
10003 陈七 22 女
10003 刘八 20 女
10004 周九 26 男
10005 周十 21 女
10006 孙A 22 女
10007 邹B 21 女
10008 王C 25 男

我想要的效果: 去除所有的重复项,重复的那一项不要保留第一个,直接全部删除,如下图示:
去除重复项后结构:
Id Name Age Sex
10004 周九 26 男
10005 周十 21 女
10006 孙A 22 女
10007 邹B 21 女
10008 王C 25 男


请问如何实现啊???
...全文
413 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
naruto1126 2013-11-29
  • 打赏
  • 举报
回复
引用 19 楼 hdhai9451 的回复:
楼主卑鄙小人一个,我还是在上班时间花十几分钟帮你呢。以后永远不会再帮你了,包括你给分的那个人。
Hi,请您来一下 CSDN > CSDN论坛 > .NET技术 > 非技术区的:“hdhai9451 请进,来接分吧。之前一贴分给错了,这是补偿贴,不好意思啊~ ” 一贴吧,昨天的事深感抱歉~
naruto1126 2013-11-28
  • 打赏
  • 举报
回复
引用 19 楼 hdhai9451 的回复:
楼主卑鄙小人一个,我还是在上班时间花十几分钟帮你呢。以后永远不会再帮你了,包括你给分的那个人。
帖子被版主移动到了: CSDN > CSDN论坛 > .NET技术 > 非技术区 中了,明天您可以直接进贴领分啦~
naruto1126 2013-11-28
  • 打赏
  • 举报
回复
引用 19 楼 hdhai9451 的回复:
楼主卑鄙小人一个,我还是在上班时间花十几分钟帮你呢。以后永远不会再帮你了,包括你给分的那个人。
我晕,给错人了,我不是故意的啊...这样吧,我明天转开一贴,就是给你送分的,真心给错人了.... 明天专开一贴给你补偿哈~
Andy__Huang 2013-11-28
  • 打赏
  • 举报
回复
楼主卑鄙小人一个,我还是在上班时间花十几分钟帮你呢。以后永远不会再帮你了,包括你给分的那个人。
Andy__Huang 2013-11-28
  • 打赏
  • 举报
回复
我靠,这种人,给分一个围观的人.以后绝对没有帮助你了.
qldsrx 2013-11-28
  • 打赏
  • 举报
回复
是Linq,另外你这个马大哈,把40分给了一个打酱油的,自己看看你给分是否公平,这样的话,下次发帖没人帮你了。
naruto1126 2013-11-28
  • 打赏
  • 举报
回复
引用 12 楼 qldsrx 的回复:

            DataTable sourceDT = new DataTable("Table1");
            sourceDT.Columns.Add("Id", System.Type.GetType("System.String"));
            sourceDT.Columns.Add("Name", System.Type.GetType("System.String"));
            sourceDT.Columns.Add("Age", System.Type.GetType("System.Int32"));
            sourceDT.Columns.Add("Sex", System.Type.GetType("System.String"));

            sourceDT.Rows.Add(new object[] { "10001", "李一", 24, "男" });
            sourceDT.Rows.Add(new object[] { "10001", "王二", 23, "男" });
            sourceDT.Rows.Add(new object[] { "10001", "孙三", 24, "女" });
            sourceDT.Rows.Add(new object[] { "10002", "李四", 23, "男" });
            sourceDT.Rows.Add(new object[] { "10002", "王五", 24, "女" });
            sourceDT.Rows.Add(new object[] { "10003", "冯六", 25, "男" });
            sourceDT.Rows.Add(new object[] { "10003", "陈七", 22, "女" });
            sourceDT.Rows.Add(new object[] { "10003", "刘八", 20, "女" });
            sourceDT.Rows.Add(new object[] { "10004", "周九", 26, "男" });
            sourceDT.Rows.Add(new object[] { "10005", "周十", 21, "女" });
            sourceDT.Rows.Add(new object[] { "10006", "孙A", 22, "女" });
            sourceDT.Rows.Add(new object[] { "10007", "邹B", 21, "女" });
            sourceDT.Rows.Add(new object[] { "10008", "王C", 25, "男" });
            var groups = sourceDT.AsEnumerable().GroupBy(t => t["Id"].ToString());
            foreach (var group in groups)
            {
                if (group.Count() > 1)
                {
                    foreach (var row in group)
                    {
                        sourceDT.Rows.Remove(row);
                    }
                }
            }
哈哈,非常感谢~ var groups = sourceDT.AsEnumerable().GroupBy(t => t["Id"].ToString()); 这一行也是Linq吗? 我还没接触呢,不过代码瞬间简洁好多好多~ 非常感谢~
naruto1126 2013-11-28
  • 打赏
  • 举报
回复
引用 14 楼 junjun0509 的回复:
lz 应该学习下hdhai9451用的linq语法,简洁实用,还跟你熟悉的sql类似,容易掌握。。。
哈哈,好的,活到老学到老,谁让咱是干这一行的呢,以后就去学习,我现在正在学习另一个很牛逼很简洁的方法呢,俗称:JQuery~
被吃了的狗 2013-11-28
  • 打赏
  • 举报
回复
引用 11 楼 u012963598 的回复:
[quote=引用 7 楼 hdhai9451 的回复:]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using TestEDM;
using TestBLL;
using System.IO;
using System.Data;

namespace TestWebClient
{
    public partial class Test : System.Web.UI.Page
    {
        List<Student> listStudent = new List<Student>();
        protected void Page_Load(object sender, EventArgs e)
        {
            DistinctStudent();

        }

        private void DistinctStudent()
        {
            listStudent.Add(new Student { ID = "10001", Name = "李一", Age = 24, Sex = "男" });
            listStudent.Add(new Student { ID = "10001", Name = "王二", Age = 23, Sex = "男" });
            listStudent.Add(new Student { ID = "10001", Name = "孙三", Age = 24, Sex = "女" });
            listStudent.Add(new Student { ID = "10002", Name = "李四", Age = 23, Sex = "男" });
            listStudent.Add(new Student { ID = "10002", Name = "王五", Age = 24, Sex = "女" });
            listStudent.Add(new Student { ID = "10003", Name = "冯六", Age = 25, Sex = "男" });
            listStudent.Add(new Student { ID = "10003", Name = "陈七", Age = 22, Sex = "女" });
            listStudent.Add(new Student { ID = "10003", Name = "刘八", Age = 20, Sex = "女" });
            listStudent.Add(new Student { ID = "10004", Name = "周九", Age = 26, Sex = "男" });
            listStudent.Add(new Student { ID = "10005", Name = "周十", Age = 21, Sex = "女" });
            listStudent.Add(new Student { ID = "10006", Name = "孙A", Age = 22, Sex = "女" });
            listStudent.Add(new Student { ID = "10007", Name = "邹B", Age = 21, Sex = "女" });
            listStudent.Add(new Student { ID = "10008", Name = "王C", Age = 25, Sex = "男" });

            var alist = listStudent.GroupBy(g => g.ID).Select(t => { return new { ID = t.Key, count = t.Count() }; });
            var list = from a in listStudent join b in alist on a.ID equals b.ID where b.count == 1 select a;
            foreach (var item in list)
            {
                Response.Write(item.ID + "---" + item.Name + "---" + item.Age + "---" + item.Sex + "</br>");
            }
        }
    }
    public class Student
    {
        static Student()
        { }
        public string ID { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
        public string Sex { get; set; }
    }
}
打印结果: 10004---周九---26---男 10005---周十---21---女 10006---孙A---22---女 10007---邹B---21---女 10008---王C---25---男
真是辛苦您了,百忙之中还抽空帮我想方法,不得不顶啊~ 可惜,这种方法我的水平还看不懂 所以在此我给大家讲个自己写的特别简单,但是非常低级非常没技术含量而且代码很冗余的方法吧。。。。 以楼主的例子为例:

DataTable Dt1 = SourceDT.Clone();
DataTable Dt2 = SourceDT.Clone();
DataTable newDT = SourceDT.Copy();
int[] rownum = SourceDT.Rows.Count();
for(int i=0;i<SourceDT.Rows.Count;i++)
{
  rownum[i] = SourceDt.Rows.Count + 1;
}

foreach(DataRow rw in SourceDT)
{
 if(SourceDT.select("Id = '"+rw["Id"]+"'").Length > 1)
 {
   Dt1.ImportRow(rw);
 }
}

foreach(DataRow rw2 in Dt1)
{
 if(Dt2.select("Id = '"+rw2["Id"]+"'").Length == 0)
 {
   Dt2.ImportRow(rw2);
 }
}

for(int i=0;i<newDT.Rows.Count;i++)
{
  for(int j=0;j<Dt2.Rows.Count;j++)
   {
     if(newDt.Rows[i]["Id"].ToString() == Dt2.Rows[j]["Id"].ToString())
     {
        rowNum[i] = i;
     }
   }
}

for(int m=newDT.Rows.Cout - 1;m>=0;m--)
{
   if(RowNum[m] < newDT.Rows.Count)
   {
      newDT.Rows.RemoveAt(m)
   }
}


//那么这个newDT便为我想要的结果了~
[/quote] lz 应该学习下hdhai9451用的linq语法,简洁实用,还跟你熟悉的sql类似,容易掌握。。。
qldsrx 2013-11-28
  • 打赏
  • 举报
回复
处理代码没几行,很多都是你原来的初始化代码,处理原则是在原来的sourceDT上移除重复行,如果你要保留原来的sourceDT内容,先调用Copy方法产生一个副本吧。
qldsrx 2013-11-28
  • 打赏
  • 举报
回复

            DataTable sourceDT = new DataTable("Table1");
            sourceDT.Columns.Add("Id", System.Type.GetType("System.String"));
            sourceDT.Columns.Add("Name", System.Type.GetType("System.String"));
            sourceDT.Columns.Add("Age", System.Type.GetType("System.Int32"));
            sourceDT.Columns.Add("Sex", System.Type.GetType("System.String"));

            sourceDT.Rows.Add(new object[] { "10001", "李一", 24, "男" });
            sourceDT.Rows.Add(new object[] { "10001", "王二", 23, "男" });
            sourceDT.Rows.Add(new object[] { "10001", "孙三", 24, "女" });
            sourceDT.Rows.Add(new object[] { "10002", "李四", 23, "男" });
            sourceDT.Rows.Add(new object[] { "10002", "王五", 24, "女" });
            sourceDT.Rows.Add(new object[] { "10003", "冯六", 25, "男" });
            sourceDT.Rows.Add(new object[] { "10003", "陈七", 22, "女" });
            sourceDT.Rows.Add(new object[] { "10003", "刘八", 20, "女" });
            sourceDT.Rows.Add(new object[] { "10004", "周九", 26, "男" });
            sourceDT.Rows.Add(new object[] { "10005", "周十", 21, "女" });
            sourceDT.Rows.Add(new object[] { "10006", "孙A", 22, "女" });
            sourceDT.Rows.Add(new object[] { "10007", "邹B", 21, "女" });
            sourceDT.Rows.Add(new object[] { "10008", "王C", 25, "男" });
            var groups = sourceDT.AsEnumerable().GroupBy(t => t["Id"].ToString());
            foreach (var group in groups)
            {
                if (group.Count() > 1)
                {
                    foreach (var row in group)
                    {
                        sourceDT.Rows.Remove(row);
                    }
                }
            }
naruto1126 2013-11-28
  • 打赏
  • 举报
回复
引用 7 楼 hdhai9451 的回复:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using TestEDM;
using TestBLL;
using System.IO;
using System.Data;

namespace TestWebClient
{
    public partial class Test : System.Web.UI.Page
    {
        List<Student> listStudent = new List<Student>();
        protected void Page_Load(object sender, EventArgs e)
        {
            DistinctStudent();

        }

        private void DistinctStudent()
        {
            listStudent.Add(new Student { ID = "10001", Name = "李一", Age = 24, Sex = "男" });
            listStudent.Add(new Student { ID = "10001", Name = "王二", Age = 23, Sex = "男" });
            listStudent.Add(new Student { ID = "10001", Name = "孙三", Age = 24, Sex = "女" });
            listStudent.Add(new Student { ID = "10002", Name = "李四", Age = 23, Sex = "男" });
            listStudent.Add(new Student { ID = "10002", Name = "王五", Age = 24, Sex = "女" });
            listStudent.Add(new Student { ID = "10003", Name = "冯六", Age = 25, Sex = "男" });
            listStudent.Add(new Student { ID = "10003", Name = "陈七", Age = 22, Sex = "女" });
            listStudent.Add(new Student { ID = "10003", Name = "刘八", Age = 20, Sex = "女" });
            listStudent.Add(new Student { ID = "10004", Name = "周九", Age = 26, Sex = "男" });
            listStudent.Add(new Student { ID = "10005", Name = "周十", Age = 21, Sex = "女" });
            listStudent.Add(new Student { ID = "10006", Name = "孙A", Age = 22, Sex = "女" });
            listStudent.Add(new Student { ID = "10007", Name = "邹B", Age = 21, Sex = "女" });
            listStudent.Add(new Student { ID = "10008", Name = "王C", Age = 25, Sex = "男" });

            var alist = listStudent.GroupBy(g => g.ID).Select(t => { return new { ID = t.Key, count = t.Count() }; });
            var list = from a in listStudent join b in alist on a.ID equals b.ID where b.count == 1 select a;
            foreach (var item in list)
            {
                Response.Write(item.ID + "---" + item.Name + "---" + item.Age + "---" + item.Sex + "</br>");
            }
        }
    }
    public class Student
    {
        static Student()
        { }
        public string ID { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
        public string Sex { get; set; }
    }
}
打印结果: 10004---周九---26---男 10005---周十---21---女 10006---孙A---22---女 10007---邹B---21---女 10008---王C---25---男
真是辛苦您了,百忙之中还抽空帮我想方法,不得不顶啊~ 可惜,这种方法我的水平还看不懂 所以在此我给大家讲个自己写的特别简单,但是非常低级非常没技术含量而且代码很冗余的方法吧。。。。 以楼主的例子为例:

DataTable Dt1 = SourceDT.Clone();
DataTable Dt2 = SourceDT.Clone();
DataTable newDT = SourceDT.Copy();
int[] rownum = SourceDT.Rows.Count();
for(int i=0;i<SourceDT.Rows.Count;i++)
{
  rownum[i] = SourceDt.Rows.Count + 1;
}

foreach(DataRow rw in SourceDT)
{
 if(SourceDT.select("Id = '"+rw["Id"]+"'").Length > 1)
 {
   Dt1.ImportRow(rw);
 }
}

foreach(DataRow rw2 in Dt1)
{
 if(Dt2.select("Id = '"+rw2["Id"]+"'").Length == 0)
 {
   Dt2.ImportRow(rw2);
 }
}

for(int i=0;i<newDT.Rows.Count;i++)
{
  for(int j=0;j<Dt2.Rows.Count;j++)
   {
     if(newDt.Rows[i]["Id"].ToString() == Dt2.Rows[j]["Id"].ToString())
     {
        rowNum[i] = i;
     }
   }
}

for(int m=newDT.Rows.Cout - 1;m>=0;m--)
{
   if(RowNum[m] < newDT.Rows.Count)
   {
      newDT.Rows.RemoveAt(m)
   }
}


//那么这个newDT便为我想要的结果了~
Andy__Huang 2013-11-28
  • 打赏
  • 举报
回复
为何一定要删除?你是绑定数据,过滤掉重复数据就可以了。 当然你一定要删除,也可以呀。在那个基础上只是是count>1都是重复的。 总之觉得你用循环这个方法可以实现,但不是最好的方法
lwwcomeon 2013-11-28
  • 打赏
  • 举报
回复
先循环DataTable找出相同行的标识值记录,再循环一次删除符合记录的那一行。
Andy__Huang 2013-11-28
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using TestEDM;
using TestBLL;
using System.IO;
using System.Data;

namespace TestWebClient
{
    public partial class Test : System.Web.UI.Page
    {
        List<Student> listStudent = new List<Student>();
        protected void Page_Load(object sender, EventArgs e)
        {
            DistinctStudent();

        }

        private void DistinctStudent()
        {
            listStudent.Add(new Student { ID = "10001", Name = "李一", Age = 24, Sex = "男" });
            listStudent.Add(new Student { ID = "10001", Name = "王二", Age = 23, Sex = "男" });
            listStudent.Add(new Student { ID = "10001", Name = "孙三", Age = 24, Sex = "女" });
            listStudent.Add(new Student { ID = "10002", Name = "李四", Age = 23, Sex = "男" });
            listStudent.Add(new Student { ID = "10002", Name = "王五", Age = 24, Sex = "女" });
            listStudent.Add(new Student { ID = "10003", Name = "冯六", Age = 25, Sex = "男" });
            listStudent.Add(new Student { ID = "10003", Name = "陈七", Age = 22, Sex = "女" });
            listStudent.Add(new Student { ID = "10003", Name = "刘八", Age = 20, Sex = "女" });
            listStudent.Add(new Student { ID = "10004", Name = "周九", Age = 26, Sex = "男" });
            listStudent.Add(new Student { ID = "10005", Name = "周十", Age = 21, Sex = "女" });
            listStudent.Add(new Student { ID = "10006", Name = "孙A", Age = 22, Sex = "女" });
            listStudent.Add(new Student { ID = "10007", Name = "邹B", Age = 21, Sex = "女" });
            listStudent.Add(new Student { ID = "10008", Name = "王C", Age = 25, Sex = "男" });

            var alist = listStudent.GroupBy(g => g.ID).Select(t => { return new { ID = t.Key, count = t.Count() }; });
            var list = from a in listStudent join b in alist on a.ID equals b.ID where b.count == 1 select a;
            foreach (var item in list)
            {
                Response.Write(item.ID + "---" + item.Name + "---" + item.Age + "---" + item.Sex + "</br>");
            }
        }
    }
    public class Student
    {
        static Student()
        { }
        public string ID { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
        public string Sex { get; set; }
    }
}
打印结果: 10004---周九---26---男 10005---周十---21---女 10006---孙A---22---女 10007---邹B---21---女 10008---王C---25---男
naruto1126 2013-11-28
  • 打赏
  • 举报
回复
引用 5 楼 hdhai9451 的回复:
数据库中和C#中都可以,但数据库直接返回不是更好吗?如果你返回重复的,没有用的数据,那还不是加重网络负载
哦,是这样子的,我详细说一下啊,是我先从一张EXCEL表中读取数据,把EXCEL表中读取的数据放入一个DataTable中,不是放在数据库中,因为这个项目用不到数据库。 然后根据需求,所有有重复的行都是错误的数据,正确的数据是没有任何重复的,所以我想要的结果就是从DataTable中取出所有没有任何重复的项,有重复的项一行也不保留~ PS:用不到数据库。。。
Andy__Huang 2013-11-28
  • 打赏
  • 举报
回复
数据库中和C#中都可以,但数据库直接返回不是更好吗?如果你返回重复的,没有用的数据,那还不是加重网络负载
naruto1126 2013-11-28
  • 打赏
  • 举报
回复
引用 1 楼 hdhai9451 的回复:

create table #SourceDT(Id int,Name varchar(10),Age int,Sex nvarchar(1))
insert into #SourceDT
select 10001,'李一',24,'男'
union all select 10001,'王二',23,'男'
union all select 10001,'孙三',24,'女'
union all select 10002,'李四',23,'男'
union all select 10002,'王五',24,'女'
union all select 10003,'冯六',25,'男'
union all select 10003,'陈七',22,'女'
union all select 10003,'刘八',20,'女'
union all select 10004,'周九',26,'男'
union all select 10005,'周十',21,'女'
union all select 10006,'孙A',22,'女'
union all select 10007,'邹B',21,'女'
union all select 10008,'王C',25,'男'

--查询重复ID
select Id from #SourceDT group by Id  having COUNT(*)>1

--删除重复数据
delete #SourceDT where Id in(select Id from #SourceDT group by Id  having COUNT(*)>1)

--重新查询
select * from #SourceDT

/*
Id	Name	Age	Sex
10004	周九	26	男
10005	周十	21	女
10006	孙A	22	女
10007	邹B	21	女
10008	王C	25	男
*/

额,赤裸裸的被您给坑了。。。。。不是在数据库中达到这个效果啊,是在C#中的DataTable中啊。。。。
naruto1126 2013-11-28
  • 打赏
  • 举报
回复
引用 2 楼 u012963598 的回复:
[quote=引用 1 楼 hdhai9451 的回复:]

create table #SourceDT(Id int,Name varchar(10),Age int,Sex nvarchar(1))
insert into #SourceDT
select 10001,'李一',24,'男'
union all select 10001,'王二',23,'男'
union all select 10001,'孙三',24,'女'
union all select 10002,'李四',23,'男'
union all select 10002,'王五',24,'女'
union all select 10003,'冯六',25,'男'
union all select 10003,'陈七',22,'女'
union all select 10003,'刘八',20,'女'
union all select 10004,'周九',26,'男'
union all select 10005,'周十',21,'女'
union all select 10006,'孙A',22,'女'
union all select 10007,'邹B',21,'女'
union all select 10008,'王C',25,'男'

--查询重复ID
select Id from #SourceDT group by Id  having COUNT(*)>1

--删除重复数据
delete #SourceDT where Id in(select Id from #SourceDT group by Id  having COUNT(*)>1)

--重新查询
select * from #SourceDT

/*
Id	Name	Age	Sex
10004	周九	26	男
10005	周十	21	女
10006	孙A	22	女
10007	邹B	21	女
10008	王C	25	男
*/

大神您真厉害啊~! 为什么SQL语句能用在C#语句里呢?小弟太菜了,完全不明白SQL跟C#是如何用的?是不是跟在SQL中用法一样?需要引入什么包吗?这叫什么技术?是JQuery吗?求指导~[/quote] 话说我放在VS2010中貌似无法运行啊 ,难道您是直接放在数据库中用的?并没有跟C#结合??? 天啊!!! 我还以为是一种跟C#完全融合的技术。。。。。 额,我不能用数据库啊,因为我没有数据库,而且,我只想知道是DataTable的时候如何达到目的? 不是在数据库中去除重复项啊。。。。
naruto1126 2013-11-28
  • 打赏
  • 举报
回复
引用 1 楼 hdhai9451 的回复:

create table #SourceDT(Id int,Name varchar(10),Age int,Sex nvarchar(1))
insert into #SourceDT
select 10001,'李一',24,'男'
union all select 10001,'王二',23,'男'
union all select 10001,'孙三',24,'女'
union all select 10002,'李四',23,'男'
union all select 10002,'王五',24,'女'
union all select 10003,'冯六',25,'男'
union all select 10003,'陈七',22,'女'
union all select 10003,'刘八',20,'女'
union all select 10004,'周九',26,'男'
union all select 10005,'周十',21,'女'
union all select 10006,'孙A',22,'女'
union all select 10007,'邹B',21,'女'
union all select 10008,'王C',25,'男'

--查询重复ID
select Id from #SourceDT group by Id  having COUNT(*)>1

--删除重复数据
delete #SourceDT where Id in(select Id from #SourceDT group by Id  having COUNT(*)>1)

--重新查询
select * from #SourceDT

/*
Id	Name	Age	Sex
10004	周九	26	男
10005	周十	21	女
10006	孙A	22	女
10007	邹B	21	女
10008	王C	25	男
*/

大神您真厉害啊~! 为什么SQL语句能用在C#语句里呢?小弟太菜了,完全不明白SQL跟C#是如何用的?是不是跟在SQL中用法一样?需要引入什么包吗?这叫什么技术?是JQuery吗?求指导~
加载更多回复(1)
本课程是PowerBI系列课程之DAX函数专题讲解,包含以下内容 1.  DAX函数基础知识什么是DAX函数数学函数:ABS、DIVIDE、MOD、RAND、ROUND、FIXED等日期和时间函数: CALENDAR、CALENDARAUTO、MONTH、YEAR、DATE、DT等信息函数:USERNAME、USERPRINCIPALNAME、HASONEFILTER、HASONEVALUE、ISFILTERED、ISCROSSFILTERED、ISINSCOPE、ISBLANK、SELECTEDMEASURE、SELECTEDMEASURENAME等逻辑函数:AND、OR、IF、IFERROR、SWITCH、TRUE、FALSE、COALESCE(官方文档含糊不清-结合实例)等关系函数:CROSSFILTER、RELATED、RELATEDTABLE等筛选器函数:FILTER、CALCULATE、ALL、ALLEXCEPT、ALLSELECTED、EARLIER、KEEPFILTERS、REMOVEFILTERS、SELECTEDVALUE、LOOKUPVALUE等父子函数:PATH、PATHCONTAINS、PATHITEM、PATHLENGTH等统计函数:AVERAGE、COUNT、MAX、MIN、SUM等迭代统计函数:AVERAGEX、COUNTX、MAXX、MINX、SUMX、RANKX等表函数: FILTERS 、ADDCOLUMNS、 SELECTCOLUMNS、 CROSSJOIN、 EXCEPT、 GENERATE、 GROUPBY、 SUMMARIZE、 SUMMARIZECOLUMNS、 TOPN、 TREATAS、 UNION、 VALUES、DISTINCT、DATATABLE、NATUALINNERJOIN、NATRUALLEFTOUTERJOIN等文本函数: EXACT、MID、 FIND、 LEN、 REPT、 LOWER、 UPPER、 UNICHAR等时间智能函数:DATEADD、DATESMTD、FIRSTDATE、LASTDATE、SAMEPERIODLASTYEAR等财务函数:2020.7之后发布的,和Excel中财务函数相似,网页和demo pbix简单介绍其他函数:BLANK、ERROR、IFERROR等 DAX函数初体验:Max、Sum、Divide、if、Values等值函数表函数以及表和列的概念DAX函数术语、语法、运算符DAX运算符和引擎中字母大小写问题DAX编程注释和快捷键DAX与Excel函数的共同点和区别(PPT)DAX、xmSQL与SQL表达式的区别(PPT)DAX函数的自学途径 2.  PowerBI中数据建模知识维度建模关系传递和交叉筛选器方向-理解表关系(1v1, 1vM, Mv1,MvM)两个方向上应用安全筛选器关闭关系自动检测新建计算列新建度量值新建计算表:辅助表(五种方式)、日历表数据类型讲解数据格式控制:%、$、千位分隔符、小数位、日期格式Format函数自定义数据格式Convert函数做数据类型转换解决中文数字单位 万 的显示问题Date和DT函数定义固定日期值显示和隐藏列DAX代码分析器阅读DAX表达式方法:从上至下、由内到外(注意Calculate的计算顺序)调试DAX表达式方法:分布输出或VAR输出3.  DAX函数原理 Vertipaq列式数据库原理理解度量值和计算列理解行上下文和筛选上下文:Calculate示意图行上下文中使用VAR替代EARLIERVAR变量在定义时的上下文中计算VAR变量是采用惰性计算(使用时计算)理解扩展表和RELATED函数理解数据沿袭Lineage 4.  开始感知DAX函数的强大DAX函数实现特殊符号的使用DAX函数实现切片器默认当前月或天DAX函数使切片器默认代表无任何选择DAX函数使切片器仅显示有数据的选DAX函数使切片器反向筛选和计算DAX函数使切片器之间取并集DAX函数使关系中多端的切片器筛选一端的切片器 DAX函数实现年月共同决定数据排序DAX函数实现动态图表标题DAX函数实现动态图表配色和图标DAX函数实现动态纵坐标DAX函数实现动态横坐标5.  理解重点DAX函数重中之重FILTER 和 CALCULATE和CALCULATETABLE详解调节器REMOVEFILTERS和ALL、ALLEXCEPT函数调节器ALL、ALLSELECTED和ISINSCOPE占比分析调节器AllSELECTED和KEEPFILTERS的比较调节器USERELATIONSHIP激活关系调节器TREATAS动态建立关系调节器CROSSFILTER改变筛选器方向重点之ISFILTERED和ISCROSSFILTERED重点之HASONEVALUE和ISINSCOPE的区别重点之表函数SELECTEDCOLUMNS和ADDCOLUMNS重点之表函数NATUALINNERJOIN和NATRUALLEFTOUTERJOIN重点之表函数FILTERS和VALUES比较重点之VALUES和DISTINCT的区别重点之分组函数SUMMARIZECOLUMNS详解重点之函数LOOKUPVALUE vs RELATED vs VLOOKUP 重点之集合函数UNION、INTERSECT、EXCEPT重点之集合函数CROSSJOIN和GENERATE 笛卡尔积重点之值合并、列合并、表合并CONCATENATEX重点之BLANK行产生的原因和BLANK相关函数重点之COALESCE函数处理空重点之FIRSTNOBLANK和FIRSTNOBLANKVALUE函数重点之使用VAR变量表中的列重点之Error和IfError函数6.  实际案例-日期时间和时间智能相关关键点-日期表和事实表关联问题时间智能-同比环比分析时间智能-累计聚合、滚动聚合、移动平均时间智能-期初期末库存分析日期分析-计算任意所选月份的环比日期分析-周的同比环比和周聚合日期分析-指定月份的同比环比和季度环比日期分析-计算季末或季末月份的数据日期分析-趋势图中根据最近月份取TopN日期分析-动态指定某个日期区间分析日期分析-动态任意区间段做数据对比日期分析-实现两个日期列的范围筛选日期分析-按工作日计算日期差日期分析-计算最近两次购买日期差日期分析-根据历史数据做销售预测日期时间函数和时间智能函数使用总结7.  实际案例-DAX函数进阶进阶-解决列排序对计算的影响进阶-实现切片器筛选之间的OR逻辑进阶-矩阵Matrix中高亮显示最大值最小值进阶-DAX列转行 vs 矩阵列转行和逆透视进阶-非日期类型的累计聚合进阶-排名逻辑的4种实现-RANKX详解进阶-分组内排名的实现和理解迭代函数进阶-TopN/BottomN和Others的实现进阶-TopN中实现动态指标进阶-TopN中实现N的动态进阶-分组内动态TopN和Others 进阶-商品折上折-迭代函数SUMX详解 进阶-分析客户购买行为进阶-找出无购买行为的客户进阶-客户购买商品关联度分析 进阶-新客户分析进阶-流失客户分析进阶-回流客户分析进阶-客户购买频次和区间分析进阶-RFM客户价值分析进阶-帕累托分析进阶-盈亏平衡分析报表性能优化思路(PPT)  

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧