2012-03-16 48 views
0

基本上我想复制一个可变数量的行。 我有一个表结构如下:多次复制一行

CREATE TABLE [dbo].[Start](
[ID] [int] NOT NULL, 
[Apt] [int] NOT NULL, 
[Cost] [int] NOT NULL) 

我想(APT-1)次重复的每一行此表,以便在年底将有#Apt行。此外,对于每个新行,Cost的值将递减,直到达到0. ID将与没有主键的ID相同。如果我有这样的记载:

1 5 3 

我需要插在同一个表中4个新行,他们应该是这样的

1 5 2 
1 5 1 
1 5 0 
1 5 0 

到目前为止,我已经尝试了很多办法,但我不能让它起作用。非常感谢!

回答

0

试试这个

DECLARE @Start TABLE ( 
[ID] [int] NOT NULL, 
[Apt] [int] NOT NULL, 
[Cost] [int] NOT NULL) 

INSERT @Start (ID, Apt, Cost) 
VALUES (1, 5, 3) 



; WITH CTE_DIGS AS (
    SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS rn 
    FROM master.sys.all_columns AS a 
) 
INSERT @Start (ID, Apt, Cost) 
SELECT ID, Apt, CASE WHEN Cost - rn < 0 THEN 0 ELSE Cost - rn END 
FROM @Start 
INNER JOIN CTE_DIGS 
    ON Apt > rn 
+0

太棒了!有用。非常感谢。现在我必须分解并理解它。 – 2012-03-16 11:34:36

0

尝试:

;with cte as 
(select [ID], [Apt], [Cost], 1 counter from [Start] 
union all 
select [ID], 
     [Apt], 
     case sign([Cost]) when 1 then [Cost]-1 else 0 end [Cost], 
     counter+1 counter 
from cte where counter < [Apt]) 
select [ID], [Apt], [Cost] 
from cte 
+0

它选择只在最后一排栏并执行排辈​​正确。问题是它永远不会停止,我得到以下错误:'声明终止。在语句完成之前,最大递归100已经耗尽。除最后一行外,其他程序不执行该程序。 – 2012-03-16 11:28:49

+0

@ Dr.Vyck:对不起,查询中的拼写错误 - 现在已更正。 – 2012-03-16 11:31:10