- PR -

DataViewのRowFilterを使用して、SUMやCOUNTなどの集計関数を利用する方法

1
投稿者投稿内容
カタナ
大ベテラン
会議室デビュー日: 2006/05/25
投稿数: 110
投稿日時: 2008-03-27 11:10
いつもお世話になります。現在ASP.NET(VB2005)の開発を行っています。
DataViewのRowFilterを使用してSUMやCOUNTを取得したいのですが、エラーになり取得することができません。
myDataTable(DataTable)の金額の合計を得たり、件数を得たりしたいのですが、やり方が分かりません。
次のようなコードを書いたのですが、「フィルタ式'SUM(金額)'はBoolean型に対して評価しません。」というエラーになってしまいます。
コード:
Dim dv As DataView = New DataView(myDataTable)
dv.RowFilter = "SUM(金額)"


myDataTable(DataTable)の金額列はInt32型でありBoolean型ではないのに、なぜこのようなエラーが出てしまうのでしょうか?
RowFilterで合計や件数を取得する方法をよろしくご教授下さい。
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-03-27 11:44
RowFilterは、行のフィルタ条件を指定するためのプロパティです。
真偽で判断できる式でないといけないので、"SUM(金額)"だとエラーになったわけです。

例えばこのように書けばエラーにはならなくなります。…あまり意味はありませんが。
コード:
dv.RowFilter = "SUM(金額) > 10000"



myTableの金額の合計値を求めるのであれば、
コード:
myTable.Columns.Add("合計金額", Type.GetType("System.Int32"), "SUM(金額)")


のようにすると、"合計金額"という列には金額の合計が入ります。件数についても同様です。
※myTableのすべての行で同じ値が入ることになります。
Hs
会議室デビュー日: 2004/06/25
投稿数: 10
お住まい・勤務地: 大阪
投稿日時: 2008-03-27 11:47
DataViewのRowFilterは文字通り行にフィルタをかける為のものなので
その様な記述は出来ませんね。(SQLのWHERE句に当たる部分のみ設定できる)

お望みの値は
DataTableのComputeメソッドで取得できると思います。
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-03-27 12:23
引用:

Hsさんの書き込み (2008-03-27 11:47) より:

お望みの値は
DataTableのComputeメソッドで取得できると思います。



知らなかった…今までずっと自分が書いた方法で取得していましたorz
カタナ
大ベテラン
会議室デビュー日: 2006/05/25
投稿数: 110
投稿日時: 2008-03-27 13:21
rainさん、Hsさん大変参考になりました。
二人のおかげでやりたいことができました。
本当にありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)