Supongo que deberás hacerlo a mano...
- pones los 3 DataSets ordenados por los mismos campos
- Luego recorres los tres al mismo tiempo, verificando que la clave (los campos por los que se unen) coincidan.
- En donde no coincidan, deberás rellenar con blancos los lugares que le toca.
También se me ocurre hacerlo utilizando el DataSource.
Esto une el primer DataSet con el segundo y el tercero, pero no controla los que están en el segundo y en el tercero y no en el primero
Código Delphi
[-]
DSDataSet1.DataSet := DataSet1;
DSDataSet2.DataSet := DataSet2;
DSDataSet3.DataSet := DataSet3;
DataSet2.DataSource := DSDataSet1;
DataSet3.DataSource := DSDataSet1;
DataSet2.DataSource := DSDataSet1;
DataSet3.DataSource := DSDataSet2;
DataSet1.Open;
DataSet2.Open;
DataSet3.Open;
while (not DataSet1.EOF) do
begin
...
DataSet1.Next;
end;