Message
 
 
To
05/04/2010 17:24:02
General information
Forum:
Visual FoxPro
Category:
Databases,Tables, Views, Indexing and SQL syntax
Title:
Re: Select
Environment versions
Visual FoxPro:
VFP 9 SP1
OS:
Windows XP
Network:
Windows XP
Database:
Visual FoxPro
Miscellaneous
Thread ID:
01458778
Message ID:
01458835
Views:
19
Sorry, if you want to go this route, you may try it yourself.

Still, how exactly do you want to match records for each month? The Row approach I took is wrong, because I didn't use any order.

>thank you for idea,
>this code work for id1=1 and id1=2
>
>SELECT ID1 ,Y2010, cast(0 as int) as Row FROM NEWTEST WHERE ID1=1 AND ID>0 into cursor crs1 readwrite
>replace all Row with recno() in crs1
>
>SELECT ID1 ,Y2010, cast(0 as int) as Row FROM NEWTEST WHERE ID1=2 AND ID>0 into cursor crs2 readwrite
>replace all Row with recno() in crs2
>
>select c2.ID1, c2.Y2010 + c1.Y2010 as Total from crs2 c2 ;
>inner join crs1 c1 on c2.Row = c1.Row into cursor crsResult nofilter
>
>
>you can help me to 
>make another 2 select as
>if id1=3
>select id1,ty2010 wher id1=2&&step1
>
>SELECT ID1 ,Y2010, cast(0 as int) as Row FROM NEWTEST WHERE ID1=3 AND ID>0 into cursor crs2 readwrite
>replace all Row with recno() in crs2&&step2
>
>step3
>select and sum from the last steps and replace sum with ty2010 where id1=3
>
>
>>Ok, here is a quick idea - you need to take it and adjust.
>>
>>create cursor crsCummulative(Month N(2), Name C(10), YTD N(20,3))
>>
>>index on str(Month) + Name tag MonthName
>>
>>select NewTest
>>set order to MonthName && similar tag
>>scan while not eof()
>>    if seek(str(ID1) + Nam, 'csrCummulative', 'MonthName')
>>        replace YTD with crsCummulative.YTD + NewTest.y2010 in crsCummulative
>>    else
>>       insert into crsCummulative values (NewTest.ID1, NewTest.Nam, NewTest.y2010)
>>    endif
>>    replace TY2010 with crsCummulative.YTD
>>endscan
>>
>>
>>>thank you for reply
>>>may be a one scan solution will be better?? how this is the qustion
>>>
>>>i need to update just the newtest as what i ask before, thank you for code
>>>
>>>
>>>m.tnNumber1=1
>>>  m.tnNumber2=2
>>>   m.tnNumber2=3
>>>.
>>>.
>>>.
>>> m.tnNumber2=12
>>>
>>> SELECT ID1 ,Y2010 FROM NEWTEST WHERE ID1=m.tnNumber1 AND ID>0
>>>id1      y2010
>>> 1       10.3
>>> 1        20
>>> 1        15
>>>  
>>>   SELECT ID1 ,Y2010 FROM NEWTEST WHERE ID1=m.tnNumber2 AND ID>0
>>>   
>>>id1    y2010
>>> 2    12
>>> 2    11.5
>>> 2    18
>>> 
>>>i need to sum y2010 where ID1=m.tnNumber1 + y2010 where ID1=m.tnNumber2 and replace at the same table to field ty2010
>>>
>>>id1   ty2010
>>>2     22.3
>>>2     31.5
>>>2      33
>>>
>>>*****************************************if id1=3
>>>
>>>
>>>   SELECT ID1 ,Y2010 FROM NEWTEST WHERE ID1=m.tnNumber3 AND ID>0
>>>   
>>>id1    y2010
>>> 3     4
>>> 3     3
>>> 3   6
>>>
>>>now 
>>>id1   ty2010
>>>3      27.3
>>>3      34.5
>>>3      39
>>>
>>>.
>>>.
>>>.
>>>.
>>>id1   ty2010
>>>12    12
>>>12
>>>
>>>
>>>
>>>>I understand, that it may work, but you don't need to use scan/endscan in that code at all. Removing scan/endscan should produce the same result.
>>>>
>>>>Anyway, use the idea from my last post to do the same for your NewTest. I'm not sure what is GroupId field in your case, it may be Nam field.
>>>>
>>>>Also, be aware that performance may suffer with this solution - may be a one scan solution will be better.
>>>>
>>>>>hi,
>>>>>Sorry the last code i send it works ,
>>>>>
>>>>>i want to show how i get values monthly and replace ment at newtest.
>>>>>
>>>>>
>>>>>i need to update just the newtest as what i ask before, thank you for code
>>>>>
>>>>>
>>>>>
>>>>>>Sorry - it looks like you don't need to use SCAN in that code, but anyway, you lost me.
>>>>>>
>>>>>>Let's assume this structure
>>>>>>
>>>>>>GroupID         Month      Value        YTD (values we want to have)
>>>>>>1               1            10          10   
>>>>>>2               1            15          15 
>>>>>>1               2            20          30
>>>>>>2               2             5          20
>>>>>>
>>>>>>
>>>>>>select T1.GroupID, (select sum(Value) from myTable T2 where T2.GroupID = T1.GroupID and T2.Month <=T1.Month ) as YTD 
>>>>>>from myTable T1  
>>>>>>
>>>>>>
>>>>>>>hi,
>>>>>>>
>>>>>>>evrye values for filelds partofname is 2009 it is old values just i used to compare ,
>>>>>>>
>>>>>>>but every month i fill(replace) the newtest form another table have 6 values via this code
>>>>>>>
>>>>>>>SET DELETED ON
>>>>>>>USE newtest 
>>>>>>>UPDATE newtest  SET y2010 = T.val1  from newtest  inner join hamad T on newtest.ID = T.ID WHERE id1=2
>>>>>>>
>>>>>>>UPDATE newtest SET PER1= (Y2010-Y2009)/Y2009 from newtest WHERE ID1=2
>>>>>>>*brow
>>>>>>>
>>>>>>>***********************************************************************
>>>>>>>scan
>>>>>>>
>>>>>>>SET FILTER TO  ID1=2 AND FLG=1
>>>>>>>   SUM Y2010 TO M.D FOR id1=2
>>>>>>>  
>>>>>>>   
>>>>>>>SET FILTER TO 
>>>>>>>   REPLACE Y2010 WITH M.D FOR NAM="TOT1" AND id1=2
>>>>>>>  
>>>>>>>endscan
>>>>>>>
>>>>>>>scan
>>>>>>>
>>>>>>>SET FILTER TO  ID1=2 AND FLG=2
>>>>>>>   SUM Y2010 TO M.D FOR id1=2
>>>>>>>  
>>>>>>>   
>>>>>>>SET FILTER TO 
>>>>>>>   REPLACE Y2010 WITH M.D FOR NAM="TOT2" AND id1=2
>>>>>>>  endscan
>>>>>>>
>>>>>>>
>>>>>>>scan
>>>>>>>
>>>>>>>SET FILTER TO  ID1=2 AND FLG=3
>>>>>>>   SUM Y2010 TO M.D FOR id1=2
>>>>>>>  
>>>>>>>   
>>>>>>>SET FILTER TO 
>>>>>>>   REPLACE Y2010 WITH M.D FOR NAM="TOT3" AND id1=2
>>>>>>> endscan
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>The output above was not really helpful. Do you match records by name? In other words, for each month you have many records. How do you match each month?
>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>>Field  Field Name      Type                Width    Dec   Index   Collate Nulls    Next    Step
>>>>>>>>>>>    1  ID1             Numeric                 3                             No
>>>>>>>>>>>    2  ID              Numeric                 2                             No
>>>>>>>>>>>    3  NAM             Character              10                             No
>>>>>>>>>>>    4  Y2009           Numeric                15      3                      No
>>>>>>>>>>>    5  Y2010           Numeric                15      3                      No
>>>>>>>>>>>    6  PER1            Numeric                15      3                      No
>>>>>>>>>>>    7  TY2009          Numeric                15      3                      No
>>>>>>>>>>>    8  TY2010          Numeric                15      3                      No
>>>>>>>>>>>    9  TPER            Numeric                15      3                      No
>>>>>>>>>>>   10  FLG             Numeric                 2                             No
>>>>>>>>>>>** Total **                                  108
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>Ok, and also some data (copy to 'temp.txt' delimited with tab)
If it's not broken, fix it until it is.


My Blog
Previous
Next
Reply
Map
View