【问题标题】:Pivoting values from datatable从数据表中透视值
【发布时间】:2018-07-14 15:38:17
【问题描述】:

我有一个如下形式的数据表

Country Currency    Category    Value (Delivered)
AFRICA  USD         CONTAINER   100
AFRICA  USD         CONTAINER   100
AFRICA  USD         PLASTIC     100 
AFRICA  USD         PLASTIC     100 
AFRICA  USD         PLASTIC     100 
AFRICA  USD         PLASTIC     100 
AFRICA  USD         PLASTIC     100
AFRICA  USD         PLASTIC     100

我需要得到如下值,

COUNTRY Currency    CONTAINER   PLASTIC     OTHERS
Africa  USD         200         600          0

表示,除了塑料或容器之外的任何东西,都需要添加到其他列中。

【问题讨论】:

标签: c# datatable pivot


【解决方案1】:

您可以为此目的使用NReco.PivotData nuget 包:

DataTable tbl;  // lets assume this is your datatable
var pvtData = new PivotData(new[] {"Country", "Currency", "Category"}, new SumAggregatorFactory("Value (Delivered)") );
pvtData.ProcessData(new DataTableReader(tbl));
var pvtTbl = new PivotTable(
    new [] {"Country", "Currency"}, //rows
    new [] {"Category"}, //columns
    pvtData);

// use PivotTable class API to iterate through rows/columns and get the values
for (var r=0; r<pvtTbl.RowKeys.Length; r++) { 
    var rowKey = pvtTbl.RowKeys[r];
    for (var c=0; c<pvtTbl.ColumnKeys.Length; c++) {
        var cellValue = pvtTbl[r,c].Value;
        // do what you need: render HTML table, or export to CSV, or populate pivoted DataTable
    }
}

库对于单一部署的非 SaaS 项目是免费的(我是这个库的作者)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    相关资源
    最近更新 更多