Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Query a schede incrociate di SQL Server 2008

Dovresti essere in grado di farlo con l'operatore "pivot". Qualcosa del genere (anche se sono sicuro di aver smorzato alcuni dettagli di ortografia o sintassi...):

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;

Il problema è che è necessario conoscere l'esatto insieme di ID sito che si desidera includere nella query. Se hai bisogno di un campo incrociato più dinamico (come quello che puoi ottenere in Excel), devi generare il testo della query come una stringa e usare sp_executesql per eseguirlo. Nel testo generato, includi tanti "[1], [2], [3], [4], [5]..." e "[1] as site1, [2] as site2.. ." cose di cui hai bisogno.