Want to use pivot and lag function together in SQL
Because you only provided pictures i populated the tables with different data but this should alse apply to your case. Is this what you are looking for?
EDIT:
I changed the query to be dynamic. This should do the trick. Of course, you have to change table name #tbl to your table name.
/*Creating a table and populating it*/
CREATE TABLE #tbl (product nvarchar(50), region nvarchar(10), [year] int, sales int);
DECLARE @sql nvarchar(max);
DECLARE @columnname nvarchar(max);

INSERT INTO #tbl(product, region, [year], sales)
SELECT  'TEA',  'D1',   2018,   40
UNION ALL SELECT    'TEA',  'D2',   2018,   30
UNION ALL SELECT    'TEA',  'D3',   2018,   20
UNION ALL SELECT    'TEA',  'D4',   2018,   10
UNION ALL SELECT    'TEA',  'D5',   2018,   7
UNION ALL SELECT    'COFFEE',   'D1',   2018,   70
UNION ALL SELECT    'COFFEE',   'D2',   2018,   100
UNION ALL SELECT    'COFFEE',   'D3',   2018,   200
UNION ALL SELECT    'COFFEE',   'D4',   2018,   300
UNION ALL SELECT    'COFFEE',   'D5',   2018,   400
UNION ALL SELECT    'TEA',  'D1',   2019,   1
UNION ALL SELECT    'TEA',  'D2',   2019,   2
UNION ALL SELECT    'TEA',  'D3',   2019,   3
UNION ALL SELECT    'TEA',  'D4',   2019,   4
UNION ALL SELECT    'TEA',  'D5',   2019,   5
UNION ALL SELECT    'COFFEE',   'D1',   2019,   6
UNION ALL SELECT    'COFFEE',   'D2',   2019,   7
UNION ALL SELECT    'COFFEE',   'D3',   2019,   8
UNION ALL SELECT    'COFFEE',   'D4',   2019,   9
UNION ALL SELECT    'COFFEE',   'D5',   2019,   10
UNION ALL SELECT    'TEA',  'D1',   2020,   13
UNION ALL SELECT    'TEA',  'D2',   2020,   26
UNION ALL SELECT    'TEA',  'D3',   2020,   39
UNION ALL SELECT    'TEA',  'D4',   2020,   52
UNION ALL SELECT    'TEA',  'D5',   2020,   65
UNION ALL SELECT    'COFFEE',   'D1',   2020,   78
UNION ALL SELECT    'COFFEE',   'D2',   2020,   91
UNION ALL SELECT    'COFFEE',   'D3',   2020,   104
UNION ALL SELECT    'COFFEE',   'D4',   2020,   117
UNION ALL SELECT    'COFFEE',   'D5',   2020,   130
;

SELECT @columnname=COALESCE(@columnname+ ',', '') + QUOTENAME(CAST(q.region AS nvarchar(20)),'[]')
FROM
(SELECT DISTINCT t.region
FROM #tbl t 
UNION ALL 
SELECT DISTINCT t.region+'D' AS region
FROM #tbl t) AS q



/*for your case, just replace the table name #tbl with the name of your table*/

SET @sql='
SELECT product, [year], '+@columnname+'
FROM
(SELECT product, 
CASE WHEN salee=''diff'' THEN region+''D'' ELSE region
END AS sales, [year], sale
FROM
(SELECT t.product, t.region, t.[year], t.sales, ISNULL((t.sales - LAG(t.sales) OVER(PARTITION BY t.product, t.region order by t.[year] asc)),t.sales) AS diff
FROM #tbl t) AS a
UNPIVOT
(sale for salee IN (sales, diff)) AS up) AS q
PIVOT 
(MAX(sale)
FOR sales IN ('+@columnname+')) AS p
ORDER BY product'

EXECUTE sp_executesql @sql

Output:
+---------+------+----+-----+-----+-----+-----+-----+-----+------+------+------+
| product | year | D1 | D2  | D3  | D4  | D5  | D1D | D2D | D3D  | D4D  | D5D  |
+=========+======+====+=====+=====+=====+=====+=====+=====+======+======+======+
| COFFEE  | 2018 | 70 | 100 | 200 | 300 | 400 | 70  | 100 | 200  | 300  | 400  |
+---------+------+----+-----+-----+-----+-----+-----+-----+------+------+------+
| COFFEE  | 2019 | 6  | 7   | 8   | 9   | 10  | -64 | -93 | -192 | -291 | -390 |
+---------+------+----+-----+-----+-----+-----+-----+-----+------+------+------+
| COFFEE  | 2020 | 78 | 91  | 104 | 117 | 130 | 72  | 84  | 96   | 108  | 120  |
+---------+------+----+-----+-----+-----+-----+-----+-----+------+------+------+
| TEA     | 2018 | 40 | 30  | 20  | 10  | 7   | 40  | 30  | 20   | 10   | 7    |
+---------+------+----+-----+-----+-----+-----+-----+-----+------+------+------+
| TEA     | 2019 | 1  | 2   | 3   | 4   | 5   | -39 | -28 | -17  | -6   | -2   |
+---------+------+----+-----+-----+-----+-----+-----+-----+------+------+------+
| TEA     | 2020 | 13 | 26  | 39  | 52  | 65  | 12  | 24  | 36   | 48   | 60   |
+---------+------+----+-----+-----+-----+-----+-----+-----+------+------+------+