と
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
1 件のコメント:
ありがとうございます。大変参考になりました。
コメントを投稿
この投稿へのリンク
リンクを作成