Możesz przestawiać dane w ten sposób w dowolnej wersji Oracle.
SELECT id,
MAX( CASE WHEN key = 'name' THEN value ELSE null END ) name,
MAX( CASE WHEN key = 'height' THEN value ELSE null END ) height,
MAX( CASE WHEN key = 'awesomeness' THEN value ELSE null END ) awesomeness
FROM facts
WHERE id IN (1,2,3)
GROUP BY id
Jeśli używasz 11g, możesz również użyć PVOT
operatora.
Jeśli jednak jest to reprezentatywne dla twojego modelu danych, tego rodzaju model danych encja-atrybut na ogół będzie raczej nieefektywny. Ogólnie rzecz biorąc, byłby znacznie lepiej obsłużony z tabelą, która zawiera kolumny dla name
, height
, awesomeness
itp.