Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Sql Server 2008 Kreuztabellenabfrage

Sie sollten dies mit dem Pivot-Operator tun können. Etwas in der Art (obwohl ich sicher bin, dass ich einige Rechtschreib- oder Syntaxdetails verschluckt habe...):

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;

Das Problem dabei ist, dass Sie den genauen Satz von Website-IDs kennen müssen, die Sie in die Abfrage einbeziehen möchten. Wenn Sie eine dynamischere Kreuztabelle benötigen (wie Sie sie in Excel erhalten können), müssen Sie den Abfragetext als Zeichenfolge generieren und sp_executesql verwenden, um ihn auszuführen. In den generierten Text fügen Sie so viele der "[1], [2], [3], [4], [5]..." und "[1] als Seite1, [2] als Seite2 ein.. ." Dinge nach Bedarf.