在C#中创建数据透视表

时间:2016-06-20 12:20:13

标签: c# linq

在我的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窗体上显示它,以及如何更改每列中的内容。

2 个答案:

答案 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;

希望有帮助。