DTの集計について(任意の列の文字列が一致する行の合計)合計列が300列あります

Continuing the discussion from データテーブルの集計について(任意の列の文字列が一致する行の合計):

いつもお世話になっております。
以前、こちらのトピックで質問させて頂いた内容の類似?になるのですが、
列「果物」の文字列でデータを集約したいです。
列「果物」の文字列が重複している場合、
列「個数1」「個数2」「個数3」「個数4」をそれぞれ合計したいです。
実際のデータは集計したい列が300列あります。
このような場合、どのように処理をすれば良いでしょうか。
教えて頂きたくよろしくお願い致します。

こんにちは

最初の1列目以外の列がすべて総計するための数値列とすると以下で可能です。

dtResult =dt.AsEnumerable.GroupBy(Function(r) r("果物").ToString()).Select(Function(g) dtResult.Clone.LoadDataRow({g.Key,g.Sum(Function(r) r.ItemArray.Skip(1).Sum(Function(o) Int32.Parse(o.tostring) ))},False)).CopyToDataTable()

Sample20221128-2v2.zip (3.2 KB)

Regards,

1 Like

いつもお世話になっております。
確認が大変遅くなり、申し訳ございませんでした。

サンプルまで作って頂きありがとうございます。
今回、欲しかったのはこれではなかったのですが、
実はこの後、こちらの機能が欲しかったので大変有難いです。

私の説明が悪く本当に申し訳ございません。
今回は同じ果物でも現在数行になっているものを1行に集約し、
その際、個数1、個数2、個数3は、それぞれ列ごとに集約を希望していました。
さらに、その個数1、個数2という、列は個数300 まで存在します。

こんにちは

すみません、読み違えていました。
以下お試しください。

dt = dt.AsEnumerable.GroupBy(Function(r) r("果物").ToString()).Select(Function(g) dt.Clone.LoadDataRow({cobj(g.Key)}.Concat(dt.Columns.Cast(Of DataColumn).Skip(1).Select(Function(dc) cobj(g.Sum(Function(r) CInt(r(dc.ColumnName).ToString))))).ToArray,False)).CopyToDataTable()

Sample20221128-2v3.zip (3.2 KB)

1 Like

いつもありがとうございます。
お陰様で無事に合計が算出出来ました。

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.