Du bør være i stand til at gøre dette med 'pivot'-operatoren. Noget som dette (selvom jeg er sikker på, at jeg har dæmpet nogle stave- eller syntaksdetaljer...):
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;
Problemet med dette er, at du skal kende det nøjagtige sæt af websteds-id'er, du vil inkludere i forespørgslen. Hvis du har brug for en mere dynamisk krydstabel (som du kan få i Excel), så skal du generere forespørgselsteksten som en streng og bruge sp_executesql til at køre den. I den genererede tekst inkluderer du lige så mange af "[1], [2], [3], [4], [5]..." og "[1] som site1, [2] som site2.. ." ting, som du har brug for.