Hola.
Yo lo resolvería a nivel del programa Delphi, en el Dataset mismo que después envías a FastReport.
Por ejemplo añadiendo un ClientDataset en memoria (es decir que ni siquiera corresponde a ninguna Tabla ni consulta de la Base de Datos), y lo rellenas con la información tal y como la quieres que se muestre en el informe.
Ejemplo (ponemos la información que queremos mostrar en el ClientDataset cdsInforme).
cdsInforme.CreateDataset;
qryPiezas.First;
qryServicios.First;
// Recorremos las Piezas y Servicios y rellenamos el Dataset en Memoria
while (not qryPiezas.Eof) and (not qryServicios.Eof) do begin
cdsInforme.Append;
if not qryPiezas.Eof do begin
cdsInforme.FieldByName('PIEZA_DESCRIPCION').Value := qryPiezas.FieldByName('PIEZA').Value;
cdsInforme.FieldByName('PIEZA_UNIDAD').Value := qryPiezas.FieldByName('UNIDAD').Value;
cdsInforme.FieldByName('PIEZA_CANTIDAD').Value := qryPiezas.FieldByName('CANTIDAD').Value;
if not qryServicios.Eof do begin
cdsInforme.FieldByName('SERVICIO_DESCRIPCION').Value := qryServicios.FieldByName('SERVICIO').Value;
cdsInforme.FieldByName('SERVICIO_UNIDAD').Value := qryServicios.FieldByName('UNIDAD').Value;
cdsInforme.FieldByName('SERVICIO_CANTIDAD').Value := qryServicios.FieldByName('CANTIDAD').Value;
cdsInforme.Post;