I would use a stored procedure to fetch the data. In the stored proc, you could create duplicate records, which CR will read and create duplicate labels.
I don't know of any other way of creating variable multiple outputs. Joining directly to the tables will give you 1 record, unless the tables you are using and the join condition creates duplication.
The simple answer, in a round about way, is that CR will not create records, it will print the rows that it finds. If it only finds 1 row, it will only print 1, but if it finds 100, it will print the 100. So you need to create the correct number of rows and CR will print them.
HTH