You can do an old-school pivot
SELECT fk_ID,
MAX(CASE WHEN val_id=1 THEN value ELSE null END) as Val1Title,
MAX(CASE WHEN val_id=2 THEN value ELSE null END) as Val2Title
FROM table_name
GROUP BY fk_ID
In 11g, you can also use the PIVOT
keyword
SELECT fk_id,
"1_VAL" as Val1Title,
"2_VAL" as Val2Title
FROM table_name
PIVOT( MAX(value) as val for (val_id) in (1,2))
See this sqlfiddle for an example