Dovresti essere in grado di farlo con l'operatore "pivot". Qualcosa del genere (anche se sono sicuro di aver smorzato alcuni dettagli di ortografia o sintassi...):
select catTitle, [1] as site1, [2] as site2, [3] as site3, [4] as site4, [5] as site5
from (select category.catTitle, equipment.quantity, site.title
from equipment
inner join site
on (equipment.siteid = site.siteid)
inner join category
on (category.catid = equipment.catid)
)
pivot
(
sum (quantity)
for equipment.siteid in ( [1], [2], [3], [4], [5] )
) as pvt
order by pvt.category;
Il problema è che è necessario conoscere l'esatto insieme di ID sito che si desidera includere nella query. Se hai bisogno di un campo incrociato più dinamico (come quello che puoi ottenere in Excel), devi generare il testo della query come una stringa e usare sp_executesql per eseguirlo. Nel testo generato, includi tanti "[1], [2], [3], [4], [5]..." e "[1] as site1, [2] as site2.. ." cose di cui hai bisogno.