Dopo lungo peregrinare son riuscito a trovare la query che mi serviva. Non è che l'abbia capita
tutta ma funziona a meraviglia.
Sull'esempio che ho postato sarebbe così.
codice:
select max(case when posizione='Amministrativo'
then cognome else '' end) as Amministativi,
max(case when posizione='Capo Reparto'
then cognome else '' end) as Capi_Reparto,
max(case when posizione='Commesso'
then cognome else '' end) as Commessi,
max(case when posizione='Magazziniere'
then cognome else '' end) as Magazzinieri
from (
select e.posizione,
e.cognome,
(select count(*) from impiegati d
where e.posizione=d.posizione and e.id < d.id) as rnk
from impiegati e
) x
group by rnk
Edit. Ho ancora un problemino.
Non riesco a ottenere i risultati ordinati per cognome. Ovunque metta l'order o mi restituisce errore oppure se ne infischia.