Hi @ventura ,
Please try the following solution.
SQL
-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, [13] VARCHAR(20), [17] VARCHAR(20), [18] VARCHAR(20), [19] VARCHAR(20));
INSERT @tbl ([13], [17], [18], [19]) VALUES
('', '2020-01-04', '2020-02-04', '2020-03-04'),
('Total', '100', '200', '300'),
('Asset', '423', '435', '533'),
('Revenue', '73', '73', '76');
-- DDL and sample data population, end
SELECT * FROM @tbl;
;WITH rs AS
(
SELECT ID, _Date
, seq = ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
FROM @tbl
CROSS APPLY (VALUES
([17]),
([18]),
([19])
) v(_Date)
WHERE [13] = ''
), rs2 AS
(
SELECT t.id, t.[13] AS Indicator, v._Value
, seq = ROW_NUMBER() OVER (PARTITION BY [13] ORDER BY (SELECT NULL))
FROM @tbl AS t
CROSS APPLY (VALUES
([17]),
([18]),
([19])
) v(_Value)
WHERE [13] <> ''
)
SELECT rs2.seq, rs2.Indicator, rs._Date, rs2._Value
FROM rs
INNER JOIN rs2 ON rs2.seq = rs.seq
ORDER BY rs2.Indicator, rs.seq;
Output
+-----+-----------+------------+--------+
| seq | Indicator | _Date | _Value |
+-----+-----------+------------+--------+
| 1 | Asset | 2020-01-04 | 423 |
| 2 | Asset | 2020-02-04 | 435 |
| 3 | Asset | 2020-03-04 | 533 |
| 1 | Revenue | 2020-01-04 | 73 |
| 2 | Revenue | 2020-02-04 | 73 |
| 3 | Revenue | 2020-03-04 | 76 |
| 1 | Total | 2020-01-04 | 100 |
| 2 | Total | 2020-02-04 | 200 |
| 3 | Total | 2020-03-04 | 300 |
+-----+-----------+------------+--------+