Если у вас есть фиксированный набор значений, вы можете использовать PIVOT
с несколькими ключами:
SELECT *
FROM table_name
PIVOT ( MAX(ist) AS ist, MAX(d) AS d FOR (bst, fs) IN (
('BC', 'An') AS bc_an,
('BC', 'Ab') AS bc_ab,
('FK', 'An') AS fk_an,
('FK', 'Ab') AS fk_ab,
('B', 'An') AS b_an,
('B', 'Ab') AS b_ab
) )
Итак, для ваших тестовых данных:
CREATE TABLE table_name ( ZN, BTG, BST, FS, IST, D ) AS
SELECT 161, 18262, 'BC', 'An', 1577861387, '1,8' FROM DUAL UNION ALL
SELECT 161, 18262, 'BC', 'Ab', 1577861875, '3,9' FROM DUAL UNION ALL
SELECT 161, 18262, 'FK', 'An', 1577862769, '3,8' FROM DUAL UNION ALL
SELECT 161, 18262, 'FK', 'Ab', 1577863033, '0,2' FROM DUAL UNION ALL
SELECT 161, 18262, 'B', 'An', 1577863670, '-0,2' FROM DUAL UNION ALL
SELECT 161, 18262, 'B', 'Ab', 1577863866, '1,1' FROM DUAL
Это выводит:
ZN | BTG | BC_AN_IST | BC_AN_D | BC_AB_IST | BC_AB_D | FK_AN_IST | FK_AN_D | FK_AB_IST | FK_AB_D | B_AN_IST | B_AN_D | B_AB_IST | B_AB_D
--: | ----: | ---------: | :------ | ---------: | :------ | ---------: | :------ | ---------: | :------ | ---------: | :----- | ---------: | :-----
161 | 18262 | 1577861387 | 1,8 | 1577861875 | 3,9 | 1577862769 | 3,8 | 1577863033 | 0,2 | 1577863670 | -0,2 | 1577863866 | 1,1
дБ <> скрипка здесь