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

SQL Server 2008 Cross Tab Query

Du bør være i stand til at gøre dette med 'pivot'-operatoren. Noget som dette (selvom jeg er sikker på, at jeg har dæmpet nogle stave- eller syntaksdetaljer...):

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;

Problemet med dette er, at du skal kende det nøjagtige sæt af websteds-id'er, du vil inkludere i forespørgslen. Hvis du har brug for en mere dynamisk krydstabel (som du kan få i Excel), så skal du generere forespørgselsteksten som en streng og bruge sp_executesql til at køre den. I den genererede tekst inkluderer du lige så mange af "[1], [2], [3], [4], [5]..." og "[1] som site1, [2] som site2.. ." ting, som du har brug for.



  1. Hvordan beregner man summen af ​​en kolonne i en SQL-tabel for en given dato og lapper mistede værdier med dem fra den nærmeste tidligere dato?

  2. mySQL-undtagelse:Kan ikke oprette forbindelse til nogen af ​​de angivne MySQL-værter. gennem C#

  3. OPRET TABEL INDENFOR PROCEDURE

  4. SQL Server:Indsæt gemte procedureresultater i tabel baseret på parametre