Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从DBF文件中选择不同的值?_C#_Sql_Dbf - Fatal编程技术网

C# 如何从DBF文件中选择不同的值?

C# 如何从DBF文件中选择不同的值?,c#,sql,dbf,C#,Sql,Dbf,我从DBF文件中获取数据并将其放在DataTable中,问题是我只想获取不同的数据,例如: Column1 a b c b a 数据表应仅填充以下内容: Column1 a b c 有没有办法让这一切发生,或者让它四处传播 connDBF.Open(); string jobData1 = "SELECT * FROM HREQDETM.DBF"; OdbcCommand cmd1 =

我从DBF文件中获取数据并将其放在DataTable中,问题是我只想获取不同的数据,例如:

Column1
  a
  b
  c
  b
  a
数据表应仅填充以下内容:

Column1
  a
  b
  c
有没有办法让这一切发生,或者让它四处传播

            connDBF.Open();
            string jobData1 = "SELECT * FROM HREQDETM.DBF";

            OdbcCommand cmd1 = new OdbcCommand();
            cmd1.CommandText = (jobData1);

            OdbcDataAdapter dbAdapter1 = new OdbcDataAdapter(jobData1, connDBF);

            DataSet dtSet1 = new DataSet();
            dbAdapter1.Fill(dtSet1);


            DataTable dbTable1 = dtSet1.Tables[0];
问题是,我正在进行迁移,数据在DBF文件中,我需要一些快速的东西,因为我要在我的计算机中运行脚本,并通过SQL语句中的VPN发送数据使用:

另一种方法是,如果希望将所有数据保留在DataTable中,只提取不同的值(因此不必重新查询源,只需创建DataView并将其过滤为不同的值:

DataView view = new DataView(table);
DataTable distinctValues = view.ToTable(true, "Column1");

只需在查询中添加
DISTINCT

string jobData1 = "SELECT DISTINCT Column1 FROM HREQDETM.DBF";
如果希望Column1具有不同的值,但表中的其余列仍然具有不同的值,则必须在将两个或多个值作为Column1的一个值组合在一起时决定要获取哪些数据

范例

Column1  Column2
  a         1
  b         1
  c         1
  b         2
  a         2
因此,当删除
a
的重复项时,您希望在第2列中显示什么:
1
2

你可以写:

SELECT
   Column1,
   MIN(Column2) --To get 1 Or MAX(Column2) to get 2
FROM 
  HREQDETM.DBF
GROUP BY 
  Column1

我建议您阅读更多关于

如何从文件中读取数据的信息?可能是:“按列1从HREQDETM.DBF组中选择*”当然,您可能必须指定单独的列而不是*。但是
GROUP BY
将为我提供两行或更多行具有相同的值?它将为列1提供不同的值我想是的,有没有其他方法可以获取提取重复项的所有数据?好的,您可以从HREQDETM.DBF中编写
SELECT distinct*,但这将当所有列都不同时给出结果。如果只想在第1列上不同,则必须使用聚合来决定从其他列中获取哪些值。这比D Stanley提供的解决方案快吗?这是相同的策略(具有相同的性能)正如@DStanley在他的评论中所建议的那样。有没有其他方法可以做到这一点,问题是我有大约2000k+行,但当我提取distinct时,只剩下大约60k+,或者这样做与我在DBF上直接选择distinct相同?它只会给你
Column1
。如果你想要其他列,你必须确定哪个值您需要形成这些列。对于数字列和时间列,您可以执行
MAX
MIN
AVG
SUM
,等等。对于非数字列,您最好执行
MAX
MIN
。如果您需要更复杂的内容,请将该细节添加到您的问题中。
SELECT
   Column1,
   MIN(Column2) --To get 1 Or MAX(Column2) to get 2
FROM 
  HREQDETM.DBF
GROUP BY 
  Column1