处理数据表中的数据
本文关键字:数据 数据表 处理 | 更新日期: 2023-09-27 17:50:13
我使用这个代码从sql数据库检索数据
DataTable oeeTable = new DataTable();
oeeTable.Columns.Add("ProductionSystem", typeof(string));
oeeTable.Columns.Add("PartNumber", typeof (string));
oeeTable.Columns.Add("RunRate", typeof (int));
oeeTable.Columns.Add("Doses",typeof(int));
oeeTable.Columns.Add("HoursOfGoodProduct",typeof(double));
DataView view = new DataView(oeeTable);
dataGridView1.DataSource = view;
const string sqlQuery = @"SELECT ProdSysShift.ProdSys, LotShift.PartNumber,PartNumberRunRates.TabletsPerHour, LotShift.Doses
FROM LotShift INNER JOIN
ProdSysShift ON LotShift.intShiftID = ProdSysShift.intShiftID INNER JOIN
PartNumberRunRates ON LotShift.PartNumber = PartNumberRunRates.PartNumber
WHERE (ProdSysShift.dtmDate >= '3/3/2014') AND (ProdSysShift.dtmDate <='3/5/2014')
ORDER BY ProdSysShift.ProdSys, LotShift.PartNumber";
SqlCommand myCommand = new SqlCommand(sqlQuery,_myConnection);
try
{
_myConnection.Open();
SqlDataReader myReader = myCommand.ExecuteReader();
while (myReader.Read())
{
string prodSystem = myReader["ProdSys"].ToString();
string partNumber = myReader["PartNumber"].ToString();
int tabletsPerHour = (int)myReader["TabletsPerHour"];
int doses = (int) myReader["Doses"];
double hoursOfGood = ((double)doses/tabletsPerHour);
hoursOfGood = Math.Round(hoursOfGood, 2);
oeeTable.Rows.Add(prodSystem,partNumber,tabletsPerHour, doses, hoursOfGood);
}
_myConnection.Close();
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
输出大致如下所示,并位于数据网格视图
<>之前T193 ht19 172800 109872 0.64T193 ht19 172800 242644T193 ht19 172800 745887 4.32T193 ht19 172800 843160 4.88T193 ht19 172800 20777 0.12T193 ht19 172800 384450 2.22T193 ht19 172800 00T193 ht19 172800 600020 3.47T193 ht70a 172800 612618 3.55T193 ht70a 172800 00T371 mt06 172800 00T371 mt06 172800 00T371 mt06 172800 00T371 mt06 172800 1123025 6.5T371 mt06 172800 98892 0.57T371 mt06 172800 1001704 5.8T371 mt06 172800 136080 0.79之前我要做的下一件事是将最右列中的值按最左列的不同值分组相加。所以所有的t193都要加起来。所有的t371都要放在一起加起来。我不太确定下一步会是什么,或者如果我做错了第一部分。
创建一个新表。运行两个查询,第一个查询应该得到不同ProductionSystems的可查询项。
新表的第一列:
Select(row=>row.ProductionSystem).Distinct();
创建一个循环,上面的每个值
foreach(var ps in query1above)
table.Where(row=>row.ProductionSystem == ps).Select(row=>row.HoursofGoodProduction).Sum()
这将给你你的总数。
将sum和生产系统键都添加到新表中
最后我通过一个存储过程弄清楚了我需要做什么。谢谢DonHoitnott的主意。我使用了一个存储过程,它使用select into语句创建一个临时表。我的一些数学是在那部分完成的。其余的数学运算在同一个存储过程中完成,使用来自该临时表的后续选择语句,该临时表也基于生产系统进行分组。使用这个存储过程返回的数据,我现在有了c#程序