add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
CREATE TABLE #sample (sku nvarchar(max),data_type nvarchar(max),value_type nvarchar(max),value float)
INSERT INTO #sample (sku,data_type,value_type,value)
VALUES
('sku1','forecast','units','100'),

('sku1','forecast','gross sales','40'),

('sku1','forecast','net sales','50'),

('sku1','forecast','gross profit','60'),

('sku1','actual','units','200'),

('sku1','actual','gross sales','80'),

('sku1','actual','net sales','30'),

('sku1','actual','gross profit','20');
8 rows affected
SELECT a.sku, a.value_type, a.value AS actual_value, f.value AS forecast_value, a.value - f.value AS diff
FROM #sample a
JOIN #sample f ON a.data_type = 'actual' AND
f.data_type = 'forecast' AND
a.sku = f.sku AND
a.value_type = f.value_type
sku value_type actual_value forecast_value diff
sku1 gross profit 20 60 -40
sku1 gross sales 80 40 40
sku1 net sales 30 50 -20
sku1 units 200 100 100