sql >> Base de Datos >  >> RDS >> Sqlserver

Consulta de tabulación cruzada de Sql Server 2008

Debería poder hacer esto con el operador 'pivote'. Algo como esto (aunque estoy seguro de que perdí algunos detalles de ortografía o sintaxis...):

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;

El problema con esto es que necesita saber el conjunto exacto de ID de sitio que desea incluir en la consulta. Si necesita una tabulación cruzada más dinámica (como la que puede obtener en Excel), debe generar el texto de consulta como una cadena y usar sp_executesql para ejecutarlo. En el texto generado, incluye tantos "[1], [2], [3], [4], [5]..." y "[1] como sitio1, [2] como sitio2... ." las cosas que necesites.