WITH CTE AS (
SELECT FIN01_name
,FIN02_NAME
,ROW_NUMBER( ) OVER (PARTITION BY FIN01_name ORDER BY FIN02_NAME NULLS LAST) rn
FROM FIN02_CATEGORY
JOIN FIN01_GROUP
USING FIN01_ID
)
SELECT *
FROM CTE
PIVOT (
Max(FIN02_NAME)
FOR FIN01_name IN ('Income','Expenditure','Fixed Assets','Fixed Liability','Current Assests','Current Liability')
)
;
This could work in Oracle 11G R2, won't work in earlier versions and it's untested.