Трябва да можете да направите това с оператора "pivot". Нещо подобно (въпреки че съм сигурен, че заглуших някои правописни или синтаксисни подробности...):
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;
Проблемът с това е, че трябва да знаете точния набор от идентификатори на сайтове, които искате да включите в заявката. Ако имате нужда от по-динамична кръстосана таблица (каквато можете да получите в Excel), тогава трябва да генерирате текста на заявката като низ и да използвате sp_executesql, за да я изпълните. В генерирания текст включвате колкото се може повече от „[1], [2], [3], [4], [5]...“ и „[1] като сайт1, [2] като сайт2.. ." неща, от които се нуждаете.