【问题标题】:Datatable Recors数据表记录
【发布时间】:2010-11-09 17:53:28
【问题描述】:

我有一个数据表,它有 4 列。我的问题是某些列具有相同的数据,相同的日期。我必须删除相同的数据,相同的日期。如何删除重复数据?

我的数据表: 在此表中,我必须在 for 或 foreach 循环的代码端删除 1 或 3 (Id)。因为在同一个日期有同一个Isban。

Id 名称 Isban 日期

1 A 123 09.09.2010

2 B 123 10.09.2010

3 C 123 09.09.2010

4 A 234 11.09.2010

5 B 342 12.09.2010

谢谢你 约翰

【问题讨论】:

  • 您在 ODBC 中使用 SQL 吗?什么样的数据库?关于这个问题的 C# 是什么?您是否单独循环遍历每条记录?
  • 在这个问题中我几乎看不到与asp.netasp.net-mvc 的任何关系。删除那些标签。如果确实存在关系,请随时编辑您的问题。

标签: c#


【解决方案1】:

执行此操作的标准方法是运行select distinct 查询以将不同的记录插入新表,删除现有表,然后将新表重命名为前一个表。

编辑:您可以在客户端执行此操作。

这里解决了一种方法:Distinct in DataTable

或者,循环遍历表并将每条记录存储在哈希表中;使用 Isban/Date 对作为键,记录作为值。当您遇到重复记录时,它已经在哈希表中,因此您将其忽略。然后,您可以根据哈希表中的记录创建一个新的数据表。

【讨论】:

  • 我正在使用 sql server,但我必须在代码端而不是在数据库中执行此操作。
  • 我们不能使用 for 或 foreach 循环吗?
  • @John:阅读我的回答。我告诉过你在循环中要做什么。
  • 对不起,我是asp.net的新手,有什么例子吗?
【解决方案2】:

如果您必须在循环中执行此操作,我将执行以下操作...基于给定重复实体元素的最小 ID 进行预查询,然后删除不是最小键

Select
      FldDup1,
      FldDup2,
      min( IDKey ) as KeepThisID,
      count(*) as TotalPerDupFields
   from
      YourTable
   group by
      FldDup1,
      FldDup2
   having
      TotalPerDupFields > 1

在这种情况下,您最终会得到一个示例结果...

FldDup1   FldDup2      KeepThisID    TotalPerDupFields
123       09.09.2010   1             2

因为我忽略了“A”、“B”和“C”的第二列,因为它似乎不是您对重复项的解释中的指标。

然后,我将通过参数化的 SQL-Delete 查询进行删除...

Delete from YourTable
   Where FldDup1 = ResultQuery.FldDup1
     and FldDup2 = ResultQuery.FldDup2
     and NOT IDKey = ResultQuery.KeepThisID

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 2011-04-14
    • 2019-10-19
    • 1970-01-01
    • 2016-05-30
    • 2016-10-08
    相关资源
    最近更新 更多