別のテーブルフィールドの値の集計によるSQL Server 2005計算列の結果
-
03-07-2019 - |
質問
長い質問のタイトルは申し訳ありません。
私はこれで敗者になっていると思いますが、チャンスはありません。
テーブルの計算フィールドの計算を、別のテーブルのフィールドに適用された集計関数の結果にすることは可能ですか。
i.e。
「mug」というテーブルがあり、これには「color」という子があります(これは私の英国の頭を痛めますが、ベンダーは米国からのものです、あなたは何をしますか?)、これは順番に、 「サイズ」と呼ばれる子。各テーブルにはsoldというフィールドがあります。
size.soldは、販売されている特定の色とサイズのマグカップごとに1ずつ増加します。
color.soldをSUM size.soldの集合体にします。WHERE size.colorid = color.colorid
mug.soldをSUM color.soldの集約にしますWHERE color.mugid = mug.mugid
とにかくmug.soldとcolor.soldをうまく機能させる方法はありますか、それともトリガーをいじりまわす必要がありますか?
解決
計算列が別のテーブルを直接参照することはできませんが、ユーザー定義関数を参照することはできます。このようなソリューションを実装する例へのリンクを次に示します。
http://www.sqlservercentral.com/articles/User -Defined + functions / complexcomputedcolumns / 2397 /
他のヒント
いいえ、これを行うことはできません。計算列は、同じ行の他のフィールドの値からのみ導出できます。別のテーブルから集計を計算するには、ビューを作成する必要があります。
アプリケーションで統計を表示する必要がある場合は、次の質問をしてください:
- これをリアルタイムで表示することは本当に必要ですか?もしそうなら、なぜですか?これを行うことが本当に必要な場合は、トリガーを使用してテーブルを更新する必要があります。 これは、非正規化に関する短いウィキペディアの記事にリンクしています。トリガーは、テーブルの更新の書き込みパフォーマンスに影響を与え、トリガーがアクティブになっていることに依存します。
- レポートの目的にのみ必要な場合は、ビューまたはレポートで計算を実行できます。
- 頻繁なアドホックレポートをサポートする必要がある場合は、データマートとオーバーナイトETLプロセスの領域に入る可能性があります。