Paul,
Yes your hunch is correct.
Putting a SQL statement at the detail level will really tie up your server.
Basically you have told crystal to run your statement 13,400 times .... and remember that Crystal processes 3 times so nearly 40,000 trips back and forth to the server.
You need to find a different approach to the problem......... maybe populate a temp table in the stored procedure first.