Вы не упомянули, используете ли вы MS Sql Server или Oracle, я предполагаю, что MS:)
Используйте CASE, и вы можете построить матрицу с желаемым результатом:
CREATE TABLE #t
(
Sale int,
DocRef varchar(1),
GeoCode varchar(1)
)
INSERT INTO #t(Sale, DocRef,GeoCode) VALUES(100, '1', 'A')
INSERT INTO #t(Sale, DocRef,GeoCode) VALUES(120, '1', 'A')
INSERT INTO #t(Sale, DocRef,GeoCode) VALUES(110, '2', 'B')
INSERT INTO #t(Sale, DocRef,GeoCode) VALUES(120, '2', 'B')
INSERT INTO #t(Sale, DocRef,GeoCode) VALUES(100, '3', 'C')
INSERT INTO #t(Sale, DocRef,GeoCode) VALUES(100, '3', 'C')
INSERT INTO #t(Sale, DocRef,GeoCode) VALUES(100, '3', 'A')
SELECT
CASE WHEN DocRef='1' THEN SUM(Sale) ELSE 0 END as NETSALES,
CASE WHEN DocRef='2' THEN SUM(Sale) ELSE 0 END AS FRESHRETURNS,
CASE WHEN DocRef='3' THEN SUM(Sale) ELSE 0 END AS SALESRETURNS
FROM
#t
GROUP BY
GeoCode,
DocRef
DROP TABLE #t