Vous devriez pouvoir le faire avec l'opérateur 'pivot'. Quelque chose comme ça (bien que je sois sûr d'avoir raté quelques détails d'orthographe ou de syntaxe...) :
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;
Le problème avec cela est que vous devez connaître l'ensemble exact d'identifiants de site que vous souhaitez inclure dans la requête. Si vous avez besoin d'un tableau croisé plus dynamique (comme vous pouvez l'obtenir dans Excel), vous devez générer le texte de la requête sous forme de chaîne et utiliser sp_executesql pour l'exécuter. Dans le texte généré, vous incluez autant de "[1], [2], [3], [4], [5]..." et "[1] que site1, [2] que site2.. ." les choses dont vous avez besoin.