2010-11-25 14 views
4

これはクエリに関連するものではなく、他のフィールドの合計として表示されているフィールドを持つことが可能な場合、私が知りたいことです。 Excelのようなビットです。他のフィールドの合計としてのSQLフィールド

レシピ

nrecepie integer 
name varchar(255) 
time integer 

とレシピがnの指示Iを持っている基本的になるように、他の

手順

nintrucion integer 
nrecepie integer 
time integer 

、:

例として、私は2つのテーブルを持っていますそれが欲しいです

recipes.time = sum(intructions.time) 

これはcreate table scriptで可能ですか?もしそうなら、どうですか?

+0

このようなことは、CREATE TABLE文の一部としては考えられません。この種類の機能にはトリガーが使用されます。更新を実行するストアドプロシージャを記述することもできます(命令の追加/削除時)。 – shahkalpesh

+0

私たちはどのような環境について話していますか? SQLサーバー?アクセス? MySQL? – wcm

答えて

2

これはINSERT/UPDATE/DELETEトリガーで実行できます。テーブルInstructionsでデータが変更されるたびに、トリガーが実行され、時刻valueRecepiesに更新されます。

+0

ありがとう、病気トリガーと一緒に行く。彼らが存在することを知らなかった。悪いgoogleとそれらを学ぶ:) – Martin

0

命令表が変更されるたびにトリガを使用して時間列を更新できますが、命令間の結合でgroup by句を使用して時間列を計算する方が一般的です受理する[sic]テーブル。あなたが本当に現実の表にそのデータを持っているしたい場合は、トリガを使用する必要があり、

CREATE VIEW recipes_with_time AS 
SELECT nrecepie, name, SUM(Instructions.time) AS total_time 
FROM Recepies 
JOIN Instructions USING (nrecepie) 
GROUP BY Recepies.nrecepie 

4

あなたはビューを使用することができます。

+0

正直に@マーティン、これは値が常に最新であることを知っているので、あなたの最善のルートです。 – wcm

+0

入力していただきありがとうございますが、実際には表示せずに行う必要があります。私はトリガーと一緒に行かなければならない – Martin

0

SQL Serverでは、たとえば、同じ行内の他の列の値に基づいて値を計算する列を作成できます。。彼らは計算列と呼ばれ、あなたはこのようにそれを実行します。一般的には

Create Table MyTable 
(
    colA Integer, 
    colB Integer, 
    colC Intgeer, 
    SumABC As colA + colB + colC 
) 

はちょうど値をghenerateすると、式や方程式「として」、単語をしたい列名を置きます。このアプローチでは、任意の記憶域を使用せず、誰かが選択エージェントを実行するたびに値を計算するので、テーブルプロファイルは狭くなり、パフォーマンスが向上します。唯一の欠点は、計算された列に索引を付けることができないことです。 (SQLサーバーには、作成または更新されたときに値を保持する必要のあるデータベースを指定できるフラグがありますが...インデックスの場合は

ただし、この例では、別の表の複数の行からデータにアクセスしています。これを行うには、他の回答者が示唆するようにトリガーが必要です。

+0

この場合、OPは別のテーブルの複数の関連レコードからの垂直合計を望んでいます(注文金額/注文合計状況のように)。 –

+0

計算された列は別の行またはテーブルのデータにアクセスできません。 – RedFilter

+0

ありがとう、例の詳細を読まずに質問に答えました。 –

0

一般的に、派生情報を格納しているため、そのような状況を避けたい(パフォーマンス上の理由から例外があります)。したがって、最良の解決策は、AndreKRによって提案されたビューを作成することです。これにより、データベースから実際に格納されている列のように簡単に選択できる、常に正しい合計が得られます。

関連する問題