C# 在C中创建透视表#
在我的c#程序中,有人输入了一整天的产量,我计算机器使用率(MU),如下所示: 所有这些数据都在我的SQL server中,我想做的是制作一个类似pivot表的东西,它需要所有相似的日期/模具编号/机器编号,并对MU进行平均,并以用户想要的任何方式显示。例如:C# 在C中创建透视表#,c#,linq,C#,Linq,在我的c#程序中,有人输入了一整天的产量,我计算机器使用率(MU),如下所示: 所有这些数据都在我的SQL server中,我想做的是制作一个类似pivot表的东西,它需要所有相似的日期/模具编号/机器编号,并对MU进行平均,并以用户想要的任何方式显示。例如: Date | MU 2/12/2016 | 32.0% 2/16/2016 | 55.4% 或 等等,基本上我希望它是可变的,并显示任何人正在看它需要。我想把它保存在我的c#程序中,但我可以使用LINQ to SQL。请
Date | MU
2/12/2016 | 32.0%
2/16/2016 | 55.4%
或
等等,基本上我希望它是可变的,并显示任何人正在看它需要。我想把它保存在我的c#程序中,但我可以使用LINQ to SQL。请记住,我对c#和LINQ对SQL都是新手
我确实试着去做,但这并不完全是我想做的。我也不知道如何在windows窗体上显示它,也不知道如何更改每个列中的内容。似乎您需要使用行维度(日期、机器编号)构建透视表,而不使用列维度,并使用平均值(按MU) 借助NReco数据透视库,您可以轻松做到这一点:
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库可以免费使用(我是作者),您可以在组件页面上下载示例包。此外,您还可以检查高级数据透视工具包组件(用于将数据透视表呈现为HTML/CSV/Excel/PDF,使用GROUP BY和许多其他工具在数据库级别聚合数据),但这些组件不是免费的 根据您的描述,您需要的不是@juharr已经提到的透视表。 对于sqlite,这应该通过以下语句来完成。(我假设表名为
tmp
,您想要的是每个MachineNUm
的MU
之和,用SMU
命名)
希望能有所帮助。您所描述的内容听起来不像是数据透视表。听起来你只是想按某个东西分组,然后做一个平均值。数据透视表将单元格中的值更改为列名。@juharr我在excel中使用数据透视表时,这是我唯一能想到的描述数据透视表的方法。太好了,我不知道那个工具。仅供参考,您页面上的第一个示例(在线c#pivot表演示)看起来不正确-行=[Country,year],列=[Products]。@CetinBasoz hm刚刚检查过-似乎正确。你能和我联系并解释一下为什么不正确吗?也许我遗漏了一些琐碎的东西……第一个是“行=[国家]、列=[年份]、度量=[销售计数]”。然而,数据透视表显示“行=[国家,年份],列=[产品]”。
Machine Num. | MU
12 | 34.4%
36 | 27.1%
54 | 53.0%
56 | 57.6%
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
SELECT MachineNum,SUM(MU) AS SMU From tmp GROUP BY MachineNum ORDER BY MachineNum;