You've never done any DB work, so you probably don't realize that the delay is the actual processing of the data. The DB has to build temporary tables and does all the number crunching in a very, very inefficient manner, processing data relationally.
In an language like C# or Java, you do number crunching in an OO manner, optimized to the specific report to be churned.
For any complex report, the DB will be the absolute slowest way to number crunch possible.