none
Datagridviewの中で計算し、新しいテーブルに保存する方法 RRS feed

回答

  • 各 DataGridView のデータは DB から取ってきているのですよね?
    (例外もあるので、一応確認です)

    各テーブルがどういう構造になっているか判りませんが、
    私なら DataGridView 同士を計算させるのではなく、
    二つのテーブルを繋げて計算するよう DBにクエリ(SQL)を投げて
    戻ってきた表を DataGridView に表示させますが。。。

    • 回答としてマーク 菊地俊介 2009年11月25日 8:44
    2009年11月10日 13:49
    モデレータ
  • 私は栄養のアプリケーションをつくっていまして、摂取カロリーを蓄積するテーブル(datagridview)と
    消費カロリーを蓄積するテーブル(datagridview)を計算して、新しいテーブル(datagridview)に表示させたいと思います。
    例えばの例でも良いのですが、教えていただけませんか?
    ちょっとこれだけではよくわからないのですが、例えば1つのDataGridViewにこれまでの摂取カロリーと消費カロリー、およびその差が表示されており、新たに本日の摂取カロリーと消費カロリーを入力すると自動的に差を表示するようなイメージなのでしょうか?
    この辺りの仕様がはっきりわからないと、どのように実現するのが良いのかをアドバイスすることは難しいです。
    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク 菊地俊介 2009年11月25日 8:44
    2009年11月10日 14:43
    モデレータ
  • ここまでの話ですと、仮に以下のテーブルが存在すると推測して、

    -- 栄養テーブル
    SELECT ID,記録日,分類,食品名,・・・,摂取カロリー FROM 栄養 -- 運動テーブル SELECT ID,記録日,分類,活動名,・・・,消費カロリー FROM 運動


    仮に ID が同じ患者?ユーザー?を指していた場合、以下のように JOIN して集計するというのが一般的なような気がします。

    #あくまでイメージです。クエリは全く検証していません。

    SEELCT 
    	栄養.ID, 
    	栄養.記録日,
    	SUM(栄養.摂取カロリー) AS 合計摂取カロリー,
    	SUM(栄養.消費カロリー) AS 合計消費カロリー,
    	SUM(栄養.摂取カロリー) - SUM(栄養.消費カロリー) AS 合計カロリー差分
    FROM
    	栄養 INNER JOIN 運動
    	ON 栄養.ID = 運動.ID 
    GROUP BY 
    	ID, 栄養.記録日
    


    別テーブルに記録したい場合は、こんな感じで挿入していけばいいかと思います。

    INSERT FROM 記録
    (ID, 記録日, 合計摂取カロリー, 合計消費カロリー, 合計カロリー差分)
    SEELCT 
    	栄養.ID, 
    	栄養.記録日,
    	SUM(栄養.摂取カロリー) AS 合計摂取カロリー,
    	SUM(栄養.消費カロリー) AS 合計消費カロリー,
    	SUM(栄養.摂取カロリー) - SUM(栄養.消費カロリー) AS 合計カロリー差分
    FROM
    	栄養 INNER JOIN 運動
    	ON 栄養.ID = 運動.ID 
    GROUP BY 
    	ID, 栄養.記録日
    
    2009年11月11日 3:11
    モデレータ
  • 上記補足です。

    JOIN して集計した結果のクエリをそのまま新たな DataGridViewに表示させるか
    また履歴を保存する必要があるなら、別テーブルに集計結果を保存し、新たなDataGridViewに表示させればいいと思います。
    • 回答としてマーク 菊地俊介 2009年11月25日 8:44
    2009年11月11日 3:16
    モデレータ

すべての返信

  • 各 DataGridView のデータは DB から取ってきているのですよね?
    (例外もあるので、一応確認です)

    各テーブルがどういう構造になっているか判りませんが、
    私なら DataGridView 同士を計算させるのではなく、
    二つのテーブルを繋げて計算するよう DBにクエリ(SQL)を投げて
    戻ってきた表を DataGridView に表示させますが。。。

    • 回答としてマーク 菊地俊介 2009年11月25日 8:44
    2009年11月10日 13:49
    モデレータ
  • 私は栄養のアプリケーションをつくっていまして、摂取カロリーを蓄積するテーブル(datagridview)と
    消費カロリーを蓄積するテーブル(datagridview)を計算して、新しいテーブル(datagridview)に表示させたいと思います。
    例えばの例でも良いのですが、教えていただけませんか?
    ちょっとこれだけではよくわからないのですが、例えば1つのDataGridViewにこれまでの摂取カロリーと消費カロリー、およびその差が表示されており、新たに本日の摂取カロリーと消費カロリーを入力すると自動的に差を表示するようなイメージなのでしょうか?
    この辺りの仕様がはっきりわからないと、どのように実現するのが良いのかをアドバイスすることは難しいです。
    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    • 回答としてマーク 菊地俊介 2009年11月25日 8:44
    2009年11月10日 14:43
    モデレータ
  • ちょっとこれだけではよくわからないのですが、例えば1つのDataGridViewにこれまでの摂取カロリーと消費カロリー、およびその差が表示されており、新たに本日の摂取カロリーと消費カロリーを入力すると自動的に差を表示するようなイメージなのでしょうか?
    この辺りの仕様がはっきりわからないと、どのように実現するのが良いのかをアドバイスすることは難しいです。

    言葉が足らず申し訳ありません。はい、まさにそのようなイメージです。
    栄養のテーブルには(ID,記録日,分類,食品名,・・・,摂取カロリー)があり、DataGridViewに表示させています。
    運動のテーブルには(ID,記録日,分類,活動名,・・・,消費カロリー)があり、DataGridViewに表示させています。
    このテーブルは同じ日にいくつもデータが入るものを蓄積させるテーブルにしたいと思っています。

    次に挑戦したいのが、記録日ごとに抽出して合計の摂取カロリー、合計消費カロリーを出したいです。
    そして、摂取カロリーと消費カロリーの差も出して、これら(記録日,合計摂取カロリー,合計消費カロリー,合計カロリー差分)
    などを新たなテーブルに保存し、DataGridViewに表示させたいと思っています。

    今は、同じForm上でタブコントロールを使って、タブごとにひとつひとつDataGridViewを表示させています。
    設計の仕方から問題があるかもしれませんが、何卒ご教示ください。
    宜しくお願いいたします。


    2009年11月11日 2:47
  • ここまでの話ですと、仮に以下のテーブルが存在すると推測して、

    -- 栄養テーブル
    SELECT ID,記録日,分類,食品名,・・・,摂取カロリー FROM 栄養 -- 運動テーブル SELECT ID,記録日,分類,活動名,・・・,消費カロリー FROM 運動


    仮に ID が同じ患者?ユーザー?を指していた場合、以下のように JOIN して集計するというのが一般的なような気がします。

    #あくまでイメージです。クエリは全く検証していません。

    SEELCT 
    	栄養.ID, 
    	栄養.記録日,
    	SUM(栄養.摂取カロリー) AS 合計摂取カロリー,
    	SUM(栄養.消費カロリー) AS 合計消費カロリー,
    	SUM(栄養.摂取カロリー) - SUM(栄養.消費カロリー) AS 合計カロリー差分
    FROM
    	栄養 INNER JOIN 運動
    	ON 栄養.ID = 運動.ID 
    GROUP BY 
    	ID, 栄養.記録日
    


    別テーブルに記録したい場合は、こんな感じで挿入していけばいいかと思います。

    INSERT FROM 記録
    (ID, 記録日, 合計摂取カロリー, 合計消費カロリー, 合計カロリー差分)
    SEELCT 
    	栄養.ID, 
    	栄養.記録日,
    	SUM(栄養.摂取カロリー) AS 合計摂取カロリー,
    	SUM(栄養.消費カロリー) AS 合計消費カロリー,
    	SUM(栄養.摂取カロリー) - SUM(栄養.消費カロリー) AS 合計カロリー差分
    FROM
    	栄養 INNER JOIN 運動
    	ON 栄養.ID = 運動.ID 
    GROUP BY 
    	ID, 栄養.記録日
    
    2009年11月11日 3:11
    モデレータ
  • 上記補足です。

    JOIN して集計した結果のクエリをそのまま新たな DataGridViewに表示させるか
    また履歴を保存する必要があるなら、別テーブルに集計結果を保存し、新たなDataGridViewに表示させればいいと思います。
    • 回答としてマーク 菊地俊介 2009年11月25日 8:44
    2009年11月11日 3:16
    モデレータ
  • 皆様、こんにちは。

    ひらぽんさん、trapemiyaさん、詳しい回答ありがとうございます。

    ぱんなさん、フォーラムのご利用ありがとうございます。
    その後いかがでしょうか。思い通りのアプリケーションは作れましたか?

    有用な情報と思われたため、ひらぽんさん、trapemiyaさんの回答へ回答マークをつけさせていただきました。

    今後ともフォーラムをよろしくお願いします。
    それでは!
    2009年11月25日 8:50