2012-12-16 82 views
1

我使用左连接总结了do while循环的结果,但由于某些未知原因,它没有连接任何表,只是覆盖。我没有看到什么?FoxPro 9.0 LEFT JOIN被覆盖

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不recogninzing箱体结构(奖金问题,却少掉一个优先事项)。

上我想要

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 

现在发生的事情是,我的决赛桌从来没有成长,它只是包含了最后一次迭代。帮助.....

回答

0

我看到这是你的第4次迭代这个同样的问题,试图得到答案。发生的事情实际上结构不合理并被抽样出来。您正在显示任意值1,2,3 ... 80,4,5,6 ... 81等。您的数据似乎全部源自BS_Case表。看来您正在尝试为每个仓库创建某种交叉表比较。

现在,您的BS_Case表中可能会有200个条目,其中包含(例如)5个独特的仓库。仓库“A”可以有40个条目,仓库“B”可以有10个,仓库“C”有18个,剩余部分在仓库“D”和“E”之间分配。

或者 - 是否每个DEPOT在BS_Case表中都有相同数量的条目...例如像McDonalds那样拥有数百家商店的企业,并且每天都向同一中心点报告每日销售额,所有商店都有相同的记录数量。

如果是这样,它看起来像你试图显示每个仓库之间的比较。

所以,例如是原始数据记录会是这样的......

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 

会导致

JustDepotList 
Record # Depot_NR 
1   DepotA 
2   DepotB 
3   DepotC 

你按你的外环代表DISTINCT仓库的列表和你希望得到的是类似的东西

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

所以,请确认一些准确的我什么是公关在这里不在。

此外,编辑这个问题(不是我的回答,但你的问题的这个版本)与修订,而不是重新张贴另一个相同的原始问题。在你的编辑,发布,显示一些实际数据,我有多接近你想要的。

我没有看到任何真正的“聚合”,如min(),max(),sum()值,但仅聚合到添加与每个库相对应的列的方面。我相信我和其他人可以更好地帮助你更好地澄清你最终想要的东西。

+0

嗨,是我的聚集是在尊重添加列,并如MIN(),MAX()和()等,我不列值能够解决其他代码片段,现在正在努力理解为什么我的案例不起作用。对不起,如果我的解释不够清楚,我已经花了很多时间在这个,并没有看到什么是显而易见的,而不是。 – Orongo

+0

@orongo,你可以编辑这篇文章,并显示所有的代码。你有一些遗漏,并没有完全得到你的开始/变量的总周期数处理。此外,“jaar”值等的一些样本,我可能会更好地使用新的解决方案,并简化如何获得您正在寻找的东西。 – DRapp

+0

@Orongo,在数据的自然显示(浏览)中看到实际的软件仓库,jaar,Psres4pcgb值真的有帮助。 – DRapp

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