と
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 件のコメント:
ありがとうございます。大変参考になりました。
すごく、すごく。助かりました。ありがとうございます。
コメントを投稿