U zou dit moeten kunnen doen met de 'pivot'-operator. Iets als dit (hoewel ik zeker weet dat ik wat spelling- of syntaxisdetails heb gedempt...):
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;
Het probleem hiermee is dat u de exacte set site-ID's moet weten die u in de zoekopdracht wilt opnemen. Als u een meer dynamische kruistabel nodig hebt (zoals u die in Excel kunt krijgen), moet u de querytekst als een tekenreeks genereren en sp_executesql gebruiken om deze uit te voeren. In de gegenereerde tekst neemt u zoveel mogelijk van de "[1], [2], [3], [4], [5]..." en "[1] op als site1, [2] als site2.. ." dingen zoals je nodig hebt.