Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Requête d'onglet croisé SQL Server 2008

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.