technically, no, the subreport needs to run each and every time, but there are ways around hitting the database.
You can use a stored procedure to fetch all the data into one really wide dataset, then you can usually group and return the same results as the subreport without actually hitting the database (or even a subreport).
You could have the subreport, but if you report is called from an application, you can have the application get the data and set the datasource of the report, this way, the reports gets the data, but you control the data/hits to the database.
If I was writing the report for a stand alone report (no application) I would probably opt for the wide dataset as that has only 1 hit to the database, and you can usually get everything to display without needed to resort to a subreport.
HTH