【发布时间】:2014-04-19 21:44:16
【问题描述】:
我正在使用此代码从 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 将放在一起并求和。我不太确定下一步会是什么,或者我是否在第一部分做错了。
【问题讨论】:
-
是否要保留最左侧和最右侧列之间的所有列?如果是这样,它们应该如何显示在您的新结果中?如果没有,你能用
SELECT ProdSysShift.ProdSys, SUM(LotShift.Doses) FROM ... WHERE ... ORDER BY ... GROUP BY LotShift.Doses之类的东西吗? -
我需要将第 4 列除以第 3 列才能得到第 5 列。在我使用的示例中,所有第 3 列恰好相同,但有时可能会有所不同基于第 2 列中的项目。
-
抱歉,我误读了您的查询。
PartNumberRunRates.TabletsPerHour和LotShift.Doses的列类型是什么? -
TabletsPerHour 和 Doses 是整数。我从这两个创建的列是双的
-
您使用的是什么 RDBMS? MySQL、SQL Server 等?