基于来自另一个表的INT在SELECT中创建行



假设我有一个名为"contracts"的表,它有一列"NumYears"。

例如。

SELECT 
ClientId,
NumYears
FROM Contracts
ClientId NumYears
-------- -----------
123456789    5
987654321    3

我有另一个表"contract_reviews",它可以通过ClientId加入到合同中。

每年,用户都会被要求查看保存在文件中的信息,并在完成后将新行插入"contract_reviews">

SELECT
ClientId,
Reviewed,
YearFor,
OtherColumn
FROM Contract_Reviews
ClientId  Reviewed    YearFor OtherColumn
--------- ----------- ------- -----------
123456789 1           2018    '£100'
123456789 1           2019    '£100'

客户"123456789"可能在第二年,因此"contract_reviews"将只保存2条记录。到"数字年"结束时,我们预计会有5年。

基本上,我需要从"contract_reviews"中选择所有行,并为丢失的"contract_reviews"生成新的空行,直到"NumYears"计数

ClientId  Reviewed    YearFor OtherColumn
--------- ----------- ------- -----------
123456789 1           2018    '£100'
123456789 1           2019    '£100'
123456789 0           NULL    NULL
123456789 0           NULL    NULL
123456789 0           NULL    NULL

这个问题在一个表中重复行(x(次数提供了一些帮助,但解决方案仍然在回避我

一个选项是使用递归查询:

with cte as (
select 
c.clientId, 
c.numYears - (
select count(*) from contract_reviews cr where cr.clientId = c.clientId
) numYears
from contracts c
union all
select clientId, numYears - 1 from cte where numYears > 1
)
insert into contract_reviews(clientId) 
select clientId from cte

递归cte的锚点为每个客户计算评审表中"缺少"的行数,然后递归部分生成这些行。最后,外部查询执行插入操作。

DB Fiddle上的演示-一旦执行查询,评审表的内容为:

ClientId|已审核|年度针对|其他列:--------|:--------------------------------------|:-----|:----------123456789 | 2018年1月| 100英镑123456789 | 2019年1月| 100英镑123456789 |null|null|null123456789 |null|null|null123456789 |null|null|null987654321|null|null|null987654321|null|null|null987654321|null|null|null

相关内容

  • 没有找到相关文章

最新更新