I believe that is a bit too complicated to do with SQL. However, I have the following suggestions for improving your code:
1) Don't abbreviate commands. It makes code more difficult to read.
2) Instead of SCATTER MEMVAR, it is probably better to use SCATTER NAME ... This will generate a single variable, similar to an object, and you can then access its properties by name.
3) To loop through all the records of a table, use SCAN ... ENDSCAN. This way, you don't need (a) the GO TOP, (b) the condition (WHILE NOT EOF(...)), and (c) the SKIP at the end of the loop.
>
>use 1001\customer again in 0 alias oldcustomer shared
>use 1002\customer again in 0 alias newcustomer shared
>sele newcustomer
>set order to accode
>sele oldcustomer
>set order to accode
>go top
>do while not eof('oldcustomer')
> scatter memvar
> sele newcustomer
> if not seek(m.accode,'newcustomer','accode')
> appe blank in newcustomer
> gather memvar
> else
> if empt(newcustomer.address1)
> repl newcustomer.address1 with m.address1 in newcustomer
> endif
> if empt(newcustomer.address2)
> repl newcustomer.address2 with m.address2 in newcustomer
> endif
> endif
> sele oldcustomer
> skip
>enddo
>
>
>
>how to do this with sql.
>
>Warm regards,
>mk.
Difference in opinions hath cost many millions of lives: for instance, whether flesh be bread, or bread be flesh; whether whistling be a vice or a virtue; whether it be better to kiss a post, or throw it into the fire... (from Gulliver's Travels)