SQL 中表之间不同行和列的 Sum 和 Product

Sum and Product of different row and columns between tables in SQL

我有一个要求,我必须对数据库进行一些计算 in/on(即,在 SQL 查询中)。在解释我的要求之前,让我解释一下 table 结构:

关系Table

Client(k)   PolicyCvg(k)        Relationship
----------------------------------------------------
RAJ         1234  00        OWNER
RAJ         1234  01        INSURED
BRAD        ASDF  00        OWNER
RAJ         ASDF  01        INSURED
BRAD        ASDF  02        INSURED
BRAD        ASDF  03        INSURED
BRAD        ASDF  04        INSURED
BRAD        ABCDEF00        OWNER
BRAD        ABCDEF01        INSURED
RAJ         ABCDEF01        INSURED

政策Table

Policy(k)   Mode        MaxCvgNum
------------------------------------------
1234        02      03
ASDF        06      04
ABCDEF      01      02

覆盖范围Table

Policy(k)   Cvg(k)      Amount      Tax     Risk
----------------------------------------------------------------------
1234        01      500.00      2.00        HIGH
ASDF        01      200.00      0.75        LOW
ASDF        02      300.00      0.76        LOW
ASDF        03      400.00      0.26        HIGH
ASDF        03      500.00      0.78        LOW
ABCDEF      01      1000.00     3.15        MEDIUM
ABCDEF      02      100.00      0.03        LOW

我的要求是将Coverage table中的AmountTax相加在一行中,然后乘以各自[=18=的Mode ] 在政策中 Table;让我们调用结果 AMT.

然后对 Coverage table 中所有行的所有 AMT (SUM (AMT)) 求和。 要从 Coverage/Policy Table 中 Select 特定的策略行,我将首先从关系 table 中获取策略,其中 'BRAD' 是所有者。

到目前为止,我只能针对每个 table:

提出以下查询
SELECT SUBSTRING(PolicyCvg,1,6) AS Policy
FROM Relationship
WHERE RELATIONSHIP = 'OWNER' AND CLIENT = 'BRAD'

SELECT Mode
FROM Policy
WHERE Policy IN (
    SELECT SUBSTRING(PolicyCvg,1,6) AS Policy
    FROM Relationship
    WHERE RELATIONSHIP = 'OWNER' AND CLIENT = 'BRAD'
)

SELECT Amount,Tax
FROM Coverage
WHERE Policy IN (
    SELECT SUBSTRING(PolicyCvg,1,6) AS Policy
    FROM Relationship
    WHERE RELATIONSHIP = 'OWNER' AND CLIENT = 'BRAD'
)

我的输入将是客户,因此首先从关系 table 中获取该客户的策略,其中关系是 OWNER。

接下来从保单 table 中获取所选保单的模式,并从覆盖范围 table 中获取这些保单的金额和税收总和。

现在将从 Coverage table 中获得的 Sum 与从 Policy Table 中获得的 Mode 相乘。将所有保单获得的所有此类产品相加,并将其作为输出作为 TotalRisk。

现在我很困惑是构建一个复杂的联合查询还是构建一个 Oracle 函数来满足我的要求,我对这两个领域的知识都很少。

你们能帮帮我吗?

如果您使用的是 Oracle,您可以尝试以下操作:

select
   r.client
  ,sum(c.amount) * max(to_number(case when p.status = 'Pending' then '0' else p.mode end)) as amount_x_mode
  ,sum(c.tax) * max(to_number(case when p.status = 'Pending' then '0' else p.mode end)) as tax_x_mode
  ,sum(c.amount) * max(to_number(case when p.status = 'Pending' then '0' else p.mode end)) + sum(c.tax) *  max(to_number(case when p.status = 'Pending' then '0' else p.mode end)) as amount_tax_x_mode
from relationship r

inner join policy p
  on trim(p.policy) = trim(SUBSTRING(r.PolicyCvg,1,6))

inner join coverage c
  on trim(c.policy) = trim(SUBSTRING(r.PolicyCvg,1,6))

where r.relationship = 'OWNER'
  and r.client = 'BRAD'

group by r.client
;

不过我觉得您可能希望在 Coverage table 的联接中包含 cvg。如果是,请告诉我,我可以为您调整查询。