0

データ フィールドの 1 つに指定された数値に従って、いくつかの行を複製するプログラムを作成する必要があります。

各行には、名前/住所データ && 数字が含まれています。この数字は、以下の例のように、この行を何回コピーする必要があるかを示します (4 はこの数字です)。

Mr A Simpson, Sunshine Street 20490, New York, 4
! したがって、このレコードはさらに 3 つの複製を必要とし、合計で 4 つになります。以下のように
、Mr A Simpson, Sunshine Street 20490, New York, 4
Mr A Simpson, Sunshine Street 20490, New York, 4
Mr A Simpson, Sunshine Street 20490, Newヨーク、4

プログラムは、テーブルの一番下に新しいレコードを追加してから、それらに関連データを入力する (そして重複が次々になるように並べ替える) か、可能であれば各行の後に重複を作成します。これは、私がまったく慣れていないアレイを行うためのものであると思います。これを完了するのにすでに数時間かかっています。

助けてくれてありがとう。

4

3 に答える 3

0

私たち (私と私の同僚) は、この問題に少し違った方法で対処してきました。これらのフィールドのうちの 2 つ (以下では、hopa_gold または hwc_red と呼ばれます)。したがって、たとえば、一方が「2」を読み取り、もう一方が「3」を読み取る場合、最初の複製を 1 つ (合計で 2 つ作成) し、もう 1 つの複製を 2 つ作成する必要があります (合計で 3 つ作成されます)。これはあまり頻繁に発生しないため、必要に応じて「手動で」行うと思います。私たちの (非常に単純な!) コードは以下のとおりです。最初の行はフィールドを数値に変更します。それ以外の場合は機能しませんでした。ご意見をお聞かせください。乾杯

ALTER table input alter hopa_gold n(10)
ALTER table input alter hwc_red n(10)
COUNT TO lastrec
Initval = 1
Varname = 1
trec = 1
GO top
replace ALL tnum WITH hopa_gold+hwc_red
GO top
FOR trec = 1 TO lastrec
    FOR VarName = Initval TO (tnum-1)  

      SCATTER MEMVAR 
      APPEND BLANK
      GATHER MEMVAR 

    ENDFOR
    GOTO trec + 1

ENDFOR
于 2013-02-04T09:33:52.750 に答える
0

Tamar が上記のコメントで述べたように、同じテーブルに追加すると、再帰的な結果が生じる可能性があります。結果を元のテーブルから「代替」作業領域に移動して、最終的なアクション (印刷など) を実行し、完了したら閉じることを検討する場合があります。このようにして、オリジナルは 1 つのエントリでそのまま残ります。

そうは言っても、繰り返しに基づいて、結果セットをシミュレートするためにレコード(またはそれ以上)を含む一時カーソルを作成します...つまり、1には1レコード、2には2、5には5があります...

create cursor C_TempNumbers ( int numMatch )
index on numMatch tag numMatch
for i = 1 to 10
   for j = 1 to i
      insert into C_TempNumbers ( numMatch ) values ( i )
   endfor
endfor

だから今、私は次のようなレコードを持つテーブルとインデックスを持っています

1
2
2
3
3
3
4
4
4
4

等..

ここで、numMatch に基づいて、このカーソルに結合された元のテーブルからクエリを実行します。1 つだけの場合、1 つのレコードが検索され、1 行が返されます。数値が 4 の場合、4 回返されます。良いことに... 4 のエントリが 20 個、3 のエントリが 30 個ある場合でも、適切なカウントが得られます。

select YT.*; 
   from YourOriginalTable YT ;
      join C_TempNumbers ;
         on YT.YourNumberColumn = C_TempNumbers.numMatch; 
   into cursor C_FinalResult readwrite

完了...最終テーブルの準備が整い、元のテーブルはそのままで、すべての重複をそこに置くことはありません。

于 2013-02-02T00:31:55.833 に答える