在我的c#程序中,我有人整天输入生产,我计算机器使用率(MU)如下:
Date | Part Number | Mold Num | Machine Num | MU
2/12/2016 | 1185-5B8 | 6580 | 12 | .428
2/12/2016 | 2249300 | 7797 | 36 | .271
2/12/2016 | 146865 | 5096789 | 12 | .260
2/16/2016 | 123456 | 7787 | 56 | .354
2/16/2016 | 123456 | 787 | 54 | .45
2/16/2016 | 123456 | 777 | 56 | .799
2/16/2016 | 123456 | 87 | 54 | .611
所有这些数据都在我的SQL服务器中,我想做的是制作类似于数据透视表的东西,它需要所有类似的日期/模具编号/机器编号,并使MU平均并以任何方式显示它用户想要的。例如:
Date | MU
2/12/2016 | 32.0%
2/16/2016 | 55.4%
或
Machine Num. | MU
12 | 34.4%
36 | 27.1%
54 | 53.0%
56 | 57.6%
等。基本上我希望它是可变的,并显示正在寻找它的人需要的任何东西。我想将它保存在我的c#程序中,但我可以使用LINQ to SQL。请记住,我是c#和LINQ to SQL的新手。
我确实试过this,但这并不是我想做的事情。我也无法弄清楚我将如何在Windows窗体上显示它,以及如何更改每列中的内容。
答案 0 :(得分:1)
您似乎需要构建具有行维度(日期,机器编号)的枢轴表,没有列维度,平均值为MU。
您可以在NReco PivotData库的帮助下轻松完成此操作:
var pivotData = new PivotData(
new string[] {"Date","Machine Num"},
new AverageAggregatorFactory("MU"),
new DataTableReader(t) ); // just a sample - you can use DB data reader
var pivotTable = new PivotTable(
new []{"Date"}, // row dimension(s)
new [0], // column dimension(s)
pivotData );
// use pivotTable.RowKeys and indexer for accessing pivot table values
PivotData库可以免费使用(我是作者),您可以在组件页面下载示例包。您也可以检查高级PivotData Toolkit组件(用于将数据透视表呈现为HTML / CSV / Excel / PDF,使用GROUP BY和其他许多数据聚合DB级别的数据),但它们不是免费的。
答案 1 :(得分:0)
根据您的描述,您想要的不是透视表,就像@juharr已经提到的那样。
对于sqlite,这可以通过以下语句来实现。 (我假设表名是tmp
,而您想要的是MU
与每个MachineNUm
之和,并用SMU
命名)。
SELECT MachineNum,SUM(MU) AS SMU From tmp GROUP BY MachineNum ORDER BY MachineNum;
希望有帮助。