0

有一个insurance policy和这个政策可以支付1-3 agents

在此处输入图像描述

第 #1 行)例如:对于策略 ID , ID1的代理,已付费100123

line #3 ) 例如:对于 policy Id 3,一个ID999,paid的741代理,以及另一个 ID 是100payed的代理874

(表示not应该如何正确完成,但我如何将其作为事实)。

我怎样才能知道代理ID总共100支付了多少?(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 回答