如何在PowerShell中对DataTable按pobox分组并求和pages列?
PowerShell DataTable分组求和实现
针对你需要按pobox分组并对pages求和的需求,可以通过Group-Object结合Measure-Object来实现,具体代码如下:
基础实现(输出自定义对象)
$dataTable | Group-Object -Property pobox | ForEach-Object { [PSCustomObject]@{ pobox = $_.Name pages = ($_.Group | Measure-Object -Property pages -Sum).Sum } }
代码说明:
Group-Object -Property pobox:将DataTable按pobox列分组,每个分组对象包含Name(分组的pobox值)和Group(该分组下的所有原始行)两个属性。Measure-Object -Property pages -Sum:对每个分组内的pages列求和,通过.Sum获取计算结果。- 用
[PSCustomObject]构造新的对象,输出分组后的pobox和对应的求和结果。
保持DataTable类型输出
如果需要输出结果仍为DataTable类型,可以进一步构造新的DataTable:
# 创建结果DataTable $resultTable = New-Object System.Data.DataTable $resultTable.Columns.Add("pobox", [string]) | Out-Null $resultTable.Columns.Add("pages", [int]) | Out-Null # 分组求和并填充结果表 $dataTable | Group-Object -Property pobox | ForEach-Object { $newRow = $resultTable.NewRow() $newRow["pobox"] = $_.Name $newRow["pages"] = ($_.Group | Measure-Object -Property pages -Sum).Sum $resultTable.Rows.Add($newRow) } # 输出结果 $resultTable
这个逻辑和你熟悉的SQL写法对应:Group-Object -Property pobox对应GROUP BY pobox,Measure-Object -Sum对应SUM(pages)。
内容的提问来源于stack exchange,提问作者PGhere
相关产品推荐
相关产品推荐

