Du bör kunna göra detta med 'pivot'-operatorn. Något liknande detta (även om jag är säker på att jag har dämpat några stavnings- eller syntaxdetaljer...):
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 detta är att du behöver veta exakt vilken uppsättning webbplats-ID du vill inkludera i frågan. Om du behöver en mer dynamisk korstabell (som du kan få i Excel), måste du generera frågetexten som en sträng och använda sp_executesql för att köra den. I den genererade texten inkluderar du lika många av "[1], [2], [3], [4], [5]..." och "[1] som site1, [2] som site2.. ." saker som du behöver.