1

左結合を使用して do while ループの結果を要約していますが、なんらかの理由でテーブルを結合せず、単に上書きしています。見えないのは何ですか?

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  jaar    as jaar,;   
        Psres4pcgb  as &depot_nr_in;        
    WHERE Depot_nr = depot_nr_in FROM bs 
    COPY TO toJoin.dbf

DO CASE 
    CASE NbofTimes = 1
        SELECT * FROM toJoin.dbf 
        COPY TO joining.dbf
    CASE NbofTimes = NbContracts
        SELECT * FROM bsP.tmp as one LEFT JOIN joining.dbf as aggregated;
        ON (one.depot_nr = aggregated.depot_nr) into table final.dbf
        CLOSE TABLES
        ENDPROC
    OTHERWISE
        SELECT &depot_nr_in FROM toJoin.dbf as a LEFT JOIN joining.dbf as b;
            ON a.jaar = b.jaar INTO TABLE final.dbf
        CLOSE TABLES
        USE final.dbf 
        COPY TO joining.dbf
ENDCASE

CLOSE TABLES
CLOSE DATABASES
ENDPROC

問題は OTHERWISE セクションに表示され (私は思う)、別の不明な理由で、FoxPro が CASE 構造を認識していません (ボーナスの質問ですが、優先度は低くなります)。

私が欲しいものの小さなイラスト

test3.dbf
===================================
22
31
32
23

NbofTimes = 1

final.dbf
===================================
year     22
-----------------------------------
  1     val1
  2     val2
  3     val3
 ...    ...
  80    val80

NbofTimes = 2

final.dbf
===================================
year      22      31
-----------------------------------
  1      val1    val4
  2      val2    val5
  3      val3    val6
 ...     ...     ...
 80      val80   val81

NbofTimes = 3

final.dbf
===================================
 year    22      31        32
-----------------------------------
  1     val1    val4      val7
  2     val2    val5      val8
  3     val3    val6      val9
 ...     ...       ...    ...
  80     val80   val81     val82

NbofTimes = 4

final.dbf
===================================
year    22      31        32       23
-----------------------------------
  1    val1    val4      val7     val10
  2    val2    val5      val8     val11
  3    val3    val6      val9     val12
 ...    ...    ...       ...      ...
  80   val80   val81     val82    val83

今何が起こっているかというと、私の最終的なテーブルは決して大きくならず、最後の反復だけが含まれています。ヘルプ.....

4

2 に答える 2

0

これは、答えを得ようとしている、この同じ質問の 4 回目の繰り返しです。何が起こっているのかは、構造化されておらず、サンプリングされていません。任意の値 1、2、3 ... 80、4、5、6 ... 81 などを表示しています。データはすべて BS_Case テーブルに由来するように見えます。各デポごとにある種のクロスタブ比較を作成しようとしているようです。

現在、BS_Case テーブルには、(たとえば) 5 つの一意のデポで構成される 200 のエントリがある場合があります。デポ "A" には 40 個のエントリがあり、デポ "B" には 10 個のエントリがあり、デポ "C" には 18 個のエントリがあり、残りはデポ "D" と "E" に分割されます。

または -- すべての DEPOT が BS_Case テーブルに同じ数のエントリを持っているか... 数百の店舗があり、すべての店舗が毎日同じ中央ポイントに毎日の売り上げを報告しているマクドナルドのような企業のように、すべての店舗が同じ数のレコード。

もしそうなら、各デポ間の比較を表示しようとしているようです。

たとえば、生データレコードは次のようになります...

BS_CASE
Record #  Depot_NR  Psres4pcgb
1         DepotA    AValue1
2         DepotB    BValue1
3         DepotC    CValue1
4         DepotA    AValue2 test
5         DepotB    BValue2 another
6         DepotC    CValue2 confirm

外側のループごとに表される DISTINCT デポのリストは、次のようになります。

JustDepotList
Record #  Depot_NR
1         DepotA
2         DepotB
3         DepotC

そして、あなたが得たいと思っているのは次のようなものです

Final
Record  DepotA        DepotB            DepotC
1       AValue1       BValue1           CValue1
2       AValue2 test  BValue2 another   CValue2 confirm

ですから、私がここで提示していることの正確性を確認してください。

また、同じ元の質問に対してさらに別の質問を再投稿する代わりに、この質問(私の回答ではなく、このバージョンの質問)を改訂して編集してください。あなたの編集、投稿で、いくつかの実際のデータと、私があなたが望むものにどれだけ近いかを示してください.

min()、max()、sum() 値などの真の「集計」は表示されませんが、集計は各デポに対応する別の列を追加するという観点からのみです。私と他の人は、あなたが最終的に何を望んでいるのかをより明確にするために、あなたをよりよく助けることができると確信しています.

于 2012-12-16T14:34:31.023 に答える
0

OTHERWISE ステートメントの下にあるこのコード スニペットを使用して、クエリを解決できました。ちょっとしたハックですが、機能しています =)

    SELECT * FROM toJoin.dbf LEFT JOIN joining.dbf;
        ON toJoin.jaar = joining.jaar INTO TABLE finaltmp.tmp
    CLOSE TABLES
    USE finaltmp.tmp
    ALTER TABLE finaltmp.tmp;
        DROP COLUMN jaar_a;
        RENAME COLUMN jaar_b TO jaar
    COPY TO final.dbf
    USE final.dbf 
    COPY TO joining.dbf 
于 2012-12-16T15:07:18.493 に答える