と
DataTableの集約計算を行う(Compute)
を利用して、DataTableをグループ化し集計を行います。
以下のようなデータが入ったDataTableから、Field1とField2で重複を取り除き集計をおこないます。
Field1 | Field2 | Field3 |
---|---|---|
りんご | 青森 | 100 |
りんご | 青森 | 100 |
みかん | 愛媛 | 100 |
みかん | 和歌山 | 100 |
みかん | 和歌山 | 100 |
メロン | 北海道 | 100 |
重複を取り除いて集計した結果は以下のデータになります。
Field1 | Field2 | Expr |
---|---|---|
りんご | 青森 | 200 |
みかん | 愛媛 | 100 |
みかん | 和歌山 | 200 |
メロン | 北海道 | 100 |
Dim dtOriginal As New DataTable dtOriginal.Columns.Add("Field1", GetType(String)) dtOriginal.Columns.Add("Field2", GetType(String)) dtOriginal.Columns.Add("Field3", GetType(Integer)) dtOriginal.Rows.Add(New Object() {"りんご", "青森", 100}) dtOriginal.Rows.Add(New Object() {"りんご", "青森", 100}) dtOriginal.Rows.Add(New Object() {"みかん", "愛媛", 100}) dtOriginal.Rows.Add(New Object() {"みかん", "和歌山", 100}) dtOriginal.Rows.Add(New Object() {"みかん", "和歌山", 100}) dtOriginal.Rows.Add(New Object() {"メロン", "北海道", 100}) Dim viw As New DataView(dtOriginal) Dim isDistinct As Boolean = True Dim cols() As String = {"Field1", "Field2"} Dim dtFilter As DataTable = viw.ToTable(isDistinct, cols) dtFilter.Columns.Add("Expr", GetType(Integer)) For Each row As DataRow In dtFilter.Rows Dim expr As String = String.Format("Field1 = '{0}' AND Field2 = '{1}'", row("Field1"), row("Field2")) row("Expr") = dtOriginal.Compute("SUM(Field3)", expr) Next For Each row As DataRow In dtFilter.Rows Console.WriteLine("Field1={0}, Field2={1}, Expr={2}", row.Item("Field1").ToString, row.Item("Field2").ToString, row.Item("Expr").ToString) Next
2 件のコメント:
ありがとうございます。大変参考になりました。
すごく、すごく。助かりました。ありがとうございます。
コメントを投稿