sql >> Database >  >> RDS >> Sqlserver

Sql Server 2008 Kruistabelquery

U zou dit moeten kunnen doen met de 'pivot'-operator. Iets als dit (hoewel ik zeker weet dat ik wat spelling- of syntaxisdetails heb gedempt...):

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;

Het probleem hiermee is dat u de exacte set site-ID's moet weten die u in de zoekopdracht wilt opnemen. Als u een meer dynamische kruistabel nodig hebt (zoals u die in Excel kunt krijgen), moet u de querytekst als een tekenreeks genereren en sp_executesql gebruiken om deze uit te voeren. In de gegenereerde tekst neemt u zoveel mogelijk van de "[1], [2], [3], [4], [5]..." en "[1] op als site1, [2] als site2.. ." dingen zoals je nodig hebt.



  1. Trucs voor het uitvoeren van een string in een functie in Sql Server

  2. Hoe kan ik voor elke letter in een string met SQL van hoofdletter veranderen?

  3. Inleiding tot Oracle-databaseback-up

  4. Illegale mix van sorteringen (latin1_swedish_ci,COERCIBLE) en (utf8_general_ci,IMPLICIT) voor bewerking 'find_in_set'