1

最終的なテーブルを集計したいのですが、結合部分を解決する方法がわかりません。各行をプロシージャに渡すテーブルcontracts.dbfを通過するDoWhileループがあります。この手順test33は、この情報を使用して、他のテーブルから目的のデータを選択します。私が望む集計は、各ループからのすべての結果です。したがって、contracts.dbfに101行ある場合、joining.dbfの幅は101列になります。

DELETE FILES *.tmp RECYCLE
SELECT distinct depot_nr FROM bs_case;
INTO table contracts.tmp

SELECT RECNO() as rownum,;
    depot_nr as depot_nr;
FROM contracts.tmp
NbContracts =RECCOUNT()
COPY TO test3.dbf
CLOSE TABLES

counter = 1

DO WHILE counter < NbContracts
    SELECT depot_nr as depot_nr;
    WHERE rownum = counter FROM test3
    test33(depot_nr, counter)
    counter = counter + 1
ENDDO
CLOSE TABLES 

PROCEDURE test33(depot_nr_in, NbofTimes)
use bs_case alias bs
SELECT  Depot_nr                as depot_nr,;
        Psres3pcgb              as psres3pcgb;
    WHERE Depot_nr = depot_nr_in FROM bs INTO TABLE toJoin.tmp

DO CASE 
    CASE NbofTimes = 1
        SELECT * FROM toJoin.tmp 
        COPY TO joining.dbf
    CASE NbofTimes = NbContracts
        ?counter
        SELECT * FROM bsP.tmp as one LEFT JOIN joining.dbf as aggregated; && ERROR HERE
        ON (one.depot_nr = aggregated.depot_nr) into table joining.dbf
        CLOSE TABLES
        ENDPROC
    Otherwise 
        SELECT * FROM toJoin.tmp as one LEFT JOIN joining.dbf as aggregated;   && ERROR HERE
        ON (one.depot_nr = aggregated.depot_nr) into table joining.dbf
        CLOSE TABLES
ENDCASE
CLOSE TABLES
CLOSE DATABASES
ENDPROC

データは次のようになります

bs_case
===================================
depot_nr      Psres3pcgb
22              123
31              222
22              345
32              444
23              222
22              222

contracts.dbf
===================================
22
31
32
23

私のプロシージャは、contracts.dbfの各値をパラメータとして受け取ります。これはdowhileループで行われます。

最終結果は、test33プロシージャの各実行からのテーブルになります。例えば

Loop 1
===============
   22
the result

Loop2
==============
    22          31
test33(22)   test33(31)

Loop3
==============
    22          31             32
test33(22)   test33(31)     test33(32)

Loop4
==============
    22          31             32              23
test33(22)   test33(31)     test33(32)     test33(23)

test33(##)の各結果は、値の列です。これが私がやろうとしていることのより良い絵を与えることを願っています

4

1 に答える 1

1

将来の実行のために結果を保存する必要がない限り、SELECT INTO TABLE や COPY TO を実行する必要はありません。

サブルーチンやループはまったく必要ないように思えます。いくつかのサンプル データと目的の結果を示してください。CREATE CURSOR と INSERT INTO を使用してサンプル データを表示するので、支援したい人は誰でもこれらの行をコピーしてテスト データを作成できます。

于 2012-12-14T21:38:19.800 に答える