grouping would be a solution, depending on what is required of the report.
a stored procedure would allow you to put all the data on 1 line so that no grouping is necessary
Here's the problem, Crystal doesn't make multiple passes through the data (well it does, but not for this), and you cannot request information from Crystal or the database ie, you cannot find a record in Crystal once you know another. Crystal reads the results of the query from top to bottom...once it has been sorted, so if the 2 records that you are seeking are not next to each other, accessing information becomes difficult.
One could store data in a shared variable. If there are lots of records that you are tracking, you could use an array...but Crystal arrays are very simple, only 1 dimension, which means to track several fields means at least as many arrays and they all have to be indexed the same way. Seems like a nightmare to me.
An alternative is to add groups into the report, so that the 2 records that you seek are next to each other, then you can use Previous or Next to access the data.
Or you can gather your data from a stored procedure, where you can put all the data on the same row, and use whatever logic you want to move things around
Or you can create subreports, since Crystal will read the data again as it creates the new report. This is a last resort, as everytime you call the subreport, Crystal is going to hit the database and retrieve the data again, which impacts performance not just on the report, but potentially the database server and network.
And there are probably more ways...there is always more than 1 way get there, it's just a matter of what works for you.
HTH