Powinieneś być w stanie to zrobić za pomocą operatora „pivot”. Coś takiego (choć jestem pewien, że stłumiłem niektóre szczegóły dotyczące pisowni lub składni...):
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;
Problem polega na tym, że musisz znać dokładny zestaw identyfikatorów witryn, które chcesz uwzględnić w zapytaniu. Jeśli potrzebujesz bardziej dynamicznej tabeli przestawnej (takiej jak w programie Excel), musisz wygenerować tekst zapytania jako ciąg i użyć sp_executesql do jego uruchomienia. W wygenerowanym tekście należy uwzględnić tyle ciągów „[1], [2], [3], [4], [5]...” i „[1] co lokacja1, [2] co lokacja2.. ”. rzeczy, których potrzebujesz.