繁体   English   中英

使用tsql中的查询计算策略年龄

[英]Counting Policy Ages with a Query in tsql

我有一个表,其中一个字段包含保险单(我们称为POLICIES),以及在另一个字段中对其进行了更新的保单:

POLICY_ID | PRIOR_POLICY_ID
===========================
ABC       |
ABD       |   ABC
AFP       |
ANR       |   ABD
BRC       |   AFP
FKZ       |

我想编写一个查询来计算每个策略的先前策略总数,结果如下所示:

POLICY_ID | NUM_PRIOR_POLICIES
==============================
ABC       |   0
ABD       |   1
AFP       |   0
ANR       |   2
BRC       |   1
FKZ       |   0

任何建议,将不胜感激。

为此,您需要递归CTE:

with cte as (
      select p.policy_id, 0 as num_priors
      from policies p
      where prior_policy_id is null
      union all
      select p.policy_id, 1 + cte.num_priors
      from cte join
           policies p
           on p.prior_policy_id = cte.policy_id
)
select *
from cte;

是一个SQL Fiddle,显示了它的工作原理。

DECLARE @data TABLE ( POLICY_ID char(3), PRIOR_POLICY_ID char(3) );

INSERT @data VALUES
  ('ABC',NULL ),('ABD','ABC'),('AFP',NULL ),
  ('ANR','ABD'),('BRC','AFP'),('FKZ',NULL );

WITH cte AS (
  SELECT POLICY_ID, 0 AS NUM_PRIOR_POLICIES
  FROM @data
  WHERE PRIOR_POLICY_ID IS NULL
  UNION ALL
  SELECT d.POLICY_ID, NUM_PRIOR_POLICIES + 1
  FROM cte c
  INNER JOIN @data d
    ON (c.POLICY_ID = d.PRIOR_POLICY_ID)
)
SELECT POLICY_ID, NUM_PRIOR_POLICIES
FROM cte
ORDER BY POLICY_ID

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM