Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Consulta de guia cruzada do SQL Server 2008


Você deve ser capaz de fazer isso com o operador 'pivot'. Algo assim (embora eu tenha certeza de que estraguei alguns detalhes de ortografia ou sintaxe ...):
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;

O problema com isso é que você precisa saber o conjunto exato de IDs de site que deseja incluir na consulta. Se você precisar de uma tabela cruzada mais dinâmica (como você pode obter no Excel), precisará gerar o texto da consulta como uma string e usar sp_executesql para executá-lo. No texto gerado, você inclui o máximo de "[1], [2], [3], [4], [5]..." e "[1] como site1, [2] como site2.. ." coisas que você precisa.