2012-03-16 18 views
0

基本的には、行を可変回数複製する必要があります。 Iは次の構造を持つテーブルを持っている:行を複数回複製する

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:申し訳ありませんが、入力ミスが修正されました。 –

関連する問題