根据特定值插入多个虚拟记录

时间:2018-02-22 17:08:42

标签: sql-server tsql

我必须创建一个显示分期付款计划的表格。 我拥有的初始表只显示基本数据,一个合同的记录。 F. e。我们有48个月的学期。 这意味着我必须创建48个记录集,以显示在48个月的生命周期内本金额和更多值的变化情况。

因此,在每个合同的最后,我应该显示n个记录,而n是月数。

我以为我是用第二张表做的,合同号是外键。并根据月数插入详细记录。 通过这种方式,我会创造一对多的关系。

现在的问题是,如何根据每份合约的月份数为每份合约记录创建确切的记录数?

2 个答案:

答案 0 :(得分:0)

您应该创建并存储数字表。 EG

create table N(i int primary key)
go
with q as
(
  select row_number() over (order by(select null)) i
  from sys.objects, sys.columns c,sys.columns c2
)
insert into N(i)
select top 10000 i
from q

go


select c.id, N.i MonthNumber, . . .
from contracts c
join N
  on n.i between 1 and c.ContractTerm

答案 1 :(得分:0)

只有48你可以硬编码。

declare @month table (mm tinyint not null primary key)
INSERT INTO @month (mm)
VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11), (12);

declare @contract table (name varchar(10), term tinyint not null) 
INSERT INTO @contract (name, term)
VALUES ('four',  4),
       ('eight', 8);

select c.name, m.mm 
  from @contract c 
  join @month m 
    on m.mm <= c.term  
order by c.name, m.mm