none
DataSet内の複数のテーブル間で集計クエリを作成するには RRS feed

  • 質問

  • 下記のページに、DataSet内の複数のテーブル間でリレーションを設定し、各テーブルを別のGridViewに表示する方法が説明されています。
    http://www.microsoft.com/japan/msdn/thisweek/300x10/phase2/relationaldata/vb.aspx

    これを、例えば集計クエリにして、ひとつのGridViewに表示させるには、どのような方法がありますでしょうか?
    このページの例で言えば、[OrderID]・[CustomerID]・[OrderDate]・[総合計金額]をGridViewに表示させたいと思っています。

    お知恵を拝借いたしたく、どうぞよろしくお願いいたします。

    2006年9月6日 14:30

回答

  • すみません。タイトルをよく読むべきでした。m(_ _)m

    さて、DataSet内のテーブルですが、これを結合してselectすることは、私の知る限りできません。ADO.NET 2.0の新機能の紹介記事にも、そのような機能はありません。もちろん、ADO.NET 1.1にもありません。実は、私もできたらなぁと以前から思っている機能です。
    したがって、そのような集計クエリを作成するウィザードも存在しないでしょう。

    ADO.NET 2.0 の新しい DataSet 機能
    http://www.microsoft.com/japan/msdn/net/adonet/datasetenhance.asp

    2006年9月6日 16:25
    モデレータ

すべての返信

  • 2つのテーブルをjoinして、group byでグルーピングして、sum(UnitPrice) as 総合計金額 のように抽出して、それをDataGridViewで表示すればいいんじゃないでしょうか?

    select OrderID, CustomerID, OrderDate, sum(UnitPrice) as 総合計金額 from Orders left outer join [Order Details] on Orders.OrderID = [Order Details].OrderID group by OrderID, CustomerID, OrderDate

    2006年9月6日 14:57
    モデレータ
  • 早速ご返信いただきまして、本当にありがとうございます。
    私がサンプルで示したページが、Windowsアプリケーションのもので、あまり適切ではなかったかと反省しております。

    いま、私の環境では、型付DataSetとしてApp_Codeフォルダのxsdファイル内に、複数のテーブルが存在しております。
    これを連結して、集計クエリを作成し、aspxファイルのGridViewにバインドしたいと思っております。

    この場合、
     1)集計SQL文をどのページで発行するべきか(xsdファイル内/GridViewのあるaspxファイル内、あるいはpartialクラスを利用した別ファイルに)
     2)ウイザードなどノーコードで、DataSet内の複数のテーブルからクエリを作ることは、そもそもできないのか
    そのあたりを知りたいと思っております。

    また何卒ご教授いただければ幸いです。

    2006年9月6日 15:41
  • すみません。タイトルをよく読むべきでした。m(_ _)m

    さて、DataSet内のテーブルですが、これを結合してselectすることは、私の知る限りできません。ADO.NET 2.0の新機能の紹介記事にも、そのような機能はありません。もちろん、ADO.NET 1.1にもありません。実は、私もできたらなぁと以前から思っている機能です。
    したがって、そのような集計クエリを作成するウィザードも存在しないでしょう。

    ADO.NET 2.0 の新しい DataSet 機能
    http://www.microsoft.com/japan/msdn/net/adonet/datasetenhance.asp

    2006年9月6日 16:25
    モデレータ
  • ご教授いただき、ありがとうございました。

    そもそも、できないんですね・・・。
    リレーションの設定ができる=結合してクエリを発行できる、と考えてしまいました。

    2006年9月7日 0:35
  • 遅レスですが,以下のように集計用カラムを設ける方法では駄目でしょうか?

    ds.OrderDetails.Columns.Add("Price", typeof(decimal), "UnitPrice * Quantity");
    ds.Order.Columns.Add("TotalPrice", typeof(decimal), "SUM(Child(OrderOrderDetails).Price)");

    2007年3月19日 7:39
  • 一応

    DataRelationとDataColumn.Expressionプロパティを利用したグループ化処理のサンプル
    http://d.hatena.ne.jp/NAL-6295/20061011/p1

    で、集計はできますが、コーディングの必要がありますので要件には合ってないか・・・。

    2007年3月20日 1:57