WITH t AS ( SELECT '20200701' dt, 100 v1, 200 v2, 300 v3, 400 v4 FROM dual UNION ALL SELECT '20200702', 111, 222, 333, 444 FROM dual UNION ALL SELECT '20200703', 222, 333, 444, 555 FROM dual UNION ALL SELECT '20200704', 666, 777, 888, 999 FROM dual UNION ALL SELECT '20200705', 100, 200, 300, 400 FROM dual UNION ALL SELECT '20200706', 111, 222, 333, 444 FROM dual ) SELECT * FROM (SELECT dt , v1, v2, v3, v4 FROM t WHERE dt IN ('20200701', '20200702', '20200703') ) UNPIVOT (v FOR gb IN (v1, v2, v3, v4)) PIVOT (MIN(v) FOR dt IN ('20200701', '20200702', '20200703')) ORDER BY gb ;