2012-03-16 10 views
0

기본적으로 행을 여러 번 복제하려고합니다. 나는 다음과 같은 구조의 테이블을 가지고 :행을 여러 번 복제하십시오.

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

내가 #Apt 행이 될 것입니다 그래서 결국 (-1 아파트) 시간이 테이블의 각 행을 복제하려는. 또한 각 새 행에 대해 Cost 값은 0에 도달 할 때까지 감소합니다. 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

좋아요! 그것은 작동합니다. 많은 감사합니다. 이제 그것을 깨뜨리고 이해해야합니다. –

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이 모두 소모되었습니다. ' 마지막 행을 제외하고 절차는 다른 행에 대해 수행되지 않습니다. –

+0

@ Dr.Vyck : 죄송합니다. 검색어에서 오타가 수정되었습니다. –

관련 문제