Una opción es asignar el FielName a ambas columnas y ocultar la aparición del valor interceptando el evento OnDrawColumnCell del DBGrid. Aquí va un ejemplito:
Código:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Column.Field.FieldName = 'SubTotal' then
with DBGrid1.Canvas do
begin
if gdSelected in State then Brush.Color := clHighLight
else Brush.Color := clWhite;
if ((Column.Field.AsCurrency >= 0) AND (Column.Index = 7)) OR
((Column.Field.AsCurrency < 0) AND (Column.Index = 8)) then
FillRect (Rect);
end;
end;
En este ejemplo, Column.Index te sirve para saber de qué columna se trata en cada caso. Si se cumple la condición se pinta el fondo de dicha celda y aparece en "blanco".