2017-07-13 9 views
0

列の値から表を挿入する必要があります。 私のテーブルには、今、私はユニット値をループしていて、その何倍ものようにテーブルに挿入カウンタの値を列の値に設定する方法

row_ID ID Code units status  
1  AAA PPP  5  Deny 
2  BBB ZZZ 10  Deny 
3  FFF MMM  7  Deny 
4  SSS YYY 3   Deny 

です。最初のレコードと最後のレコードのための私のターゲット表が 私のテーブルには、2番目と3番目のIDについても同様

ID Code  Units  Status 
AAA PPP   1   Deny 
AAA PPP   1   Deny 
AAA PPP   1   Deny 
AAA PPP   1   Deny 
AAA PPP   1   Deny 
SSS YYY   1   Deny 
SSS YYY   1   Deny 
SSS YYY   1   Deny 

のようになります。好きなはずですので、私の最初のユニット値は、5である、私のターゲットテーブルは10と7行を持っている必要があります。

Unitsの値を変数に代入しようとしましたが、サブクエリが1つ以上の値を返しました。

declare @loopcounter int,@maxunits int 
select @loopcounter=1 
select @maxunits =(select max(units) from #unit roup by ID, code) 

誰でも私にこれを手伝ってもらえますか?あなたが100未満を持っている場合は

+0

SQL Serverについて考えてみると、ループが心に浮かびます...もう一度やり直してください。 *ほとんど*常に最悪のオプションです。親指の良いルール。 – scsimon

答えて

0

して、そしてちょうど再帰CTEのために行く:

with cte as (
     select u.row_ID, u.ID, u.Code, u.units, u.status, 1 as n 
     from #unit u 
     union all 
     select row_ID, ID, Code, units, status, n + 1 
     from cte 
     where n < u.units 
    ) 
select row_ID, ID, Code, units, status 
from cte; 

再帰CTEは、100個の以上の単位で動作しますが、あなたはOPTION (MAXRECURSION 0)を使用する必要があります。

+0

ありがとうございました。これは本当に役に立ちました。私は100以上の再帰を持っています。 – chits

関連する問題