【发布时间】:2020-05-06 09:13:44
【问题描述】:
假设我有一个名为“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 条记录。到“NumYears”结束时,我们应该期待 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
这个问题Duplicated rows (x) amount of times in a table提供了一些帮助,但解决方案仍然在逃避我。
【问题讨论】:
-
如果给定合同的审查表中还没有行怎么办?
-
好问题!我没有考虑过,谢谢。我认为出于报告目的,它应该返回 X (NumYears) 的空白行,因为如果没有记录是我们失败的,因为应该在创建合同时插入第一条记录。
标签: sql sql-server tsql sql-server-2008 recursive-query