我正在使用此代码从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.64 T193 HT19 172800 242644 1.4 T193 HT19 172800 745887 4.32 T193 HT19 172800 843160 4.88 T193 HT19 172800 20777 0.12 T193 HT19 172800 384450 2.22 T193 HT19 172800 0 0 T193 HT19 172800 600020 3.47 T193 HT70A 172800 612618 3.55 T193 HT70A 172800 0 0 T371 MT06 172800 0 0 T371 MT06 172800 0 0 T371 MT06 172800 0 0 T371 MT06 172800 1123025 6.5 T371 MT06 172800 98892 0.57 T371 MT06 172800 1001704 5.8 T371 MT06 172800 136080 0.79
接下来我要做的是总结最右列中的值,这些值按最左列的不同值分组。所以所有的T193都将在一起并总结。所有T371都将在一起并总结。我不太确定下一步会是什么,或者我是否错误地解决了第一部分。
答案 0 :(得分:2)
创建一个新表。运行两个查询,首先应该可以查询不同的ProductionSystems。
新表的第一栏:
Select(row=>row.ProductionSystem).Distinct();
创建一个循环,上面的每个值
foreach(var ps in query1above)
table.Where(row=>row.ProductionSystem == ps).Select(row=>row.HoursofGoodProduction).Sum()
这将为您提供总和。
将sum和生产系统密钥添加到新表中。
答案 1 :(得分:0)
我最终弄明白了我需要通过存储的程序做什么。谢谢DonHoitnott的想法。我使用了一个存储过程,使用select into语句创建临时表。我的一些数学工作在那部分完成。我使用来自该临时表的后续select语句在同一存储过程中完成剩余的数学运算,该临时表也基于生产系统进行分组。使用这个存储的被监视的数据所恢复的数据现在我得到了我的C#程序所需的结果