0

がありinsurance policy、このポリシーは で支払うことができます1-3 agents

ここに画像の説明を入力

行 #1 ) 例: ポリシー Idの場合、 ID1のエージェントは支払い済みです。100123

行 #3 ) 例: ポリシー Idの場合、ID が であるエージェントが支払い3済みであり、ID が支払い済みである別のエージェントも999741100874

(表現はnotそれが正しく行われるべき方法ですが、それは私が事実として持っている方法です)。

100エージェント IDが支払った合計金額を確認するにはどうすればよいですか? (123+541+874+557+471+552)

私は非常に醜い組合の解決策を持っています。

SQL オンライン

4

2 に答える 2

2

適切に正規化されたモデルでは、これは単純なクエリです。CTEクエリで「正規化」してから合計できます:

with cte as (
  select agent1id as id, agent1sum as s
  from insurance where agent1id is not null
 union all
  select agent2id as id, agent2sum as s
  from insurance where agent2id is not null
 union all
  select agent3id as id, agent3sum as s
  from insurance where agent3id is not null
)
select sum( s)
  from cte
 where id = 100

テーブルにエージェント列のインデックスが含まれている場合、これはわかりやすいインデックスアプローチです。フレンドリなインデックス クエリは、フル テーブル スキャンを回避します。

于 2013-01-24T07:54:42.533 に答える
1

のように見える

SUM(
   CASE WHEN agent1id=100 THEN agent1sum ELSE 0 END +
   CASE WHEN agent2id=100 THEN agent2sum ELSE 0 END +
   CASE WHEN agent3id=100 THEN agent3sum ELSE 0 END)

適切に集計する必要があります。すべてのエージェントに対してこれを行う必要がある場合は、エージェント テーブルを使用するか、このクエリの前に CTE を使用して個別のエージェント ID を取得し、上記の 100 を置き換えます。

于 2013-01-24T07:55:29.367 に答える