C# 如何从DBF文件中选择不同的值?
我从DBF文件中获取数据并将其放在DataTable中,问题是我只想获取不同的数据,例如: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 =
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