2012-03-16 82 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