sql >> Database >  >> RDS >> Sqlserver

Hoe groeperen op de data van elke week tot de laatste zes weken op zondag in sql?

Ik heb een paar aannames gedaan over de gegevens die je hebt gepost.

Ten eerste geven de waarden die u heeft gepost het jaar allemaal aan als 2011 maar de definitieve einddatums als kolomkoppen komen niet overeen met 2011 , het zijn de Sunday waarden voor 2012 dus ik heb de gegevens gewijzigd. Ook de laatste inschrijving van Early ASN 8/15/2011 12:00 , volgens mij een Late ASN invoer anders komen de totalen overeen.

Om de resultaten te krijgen, wilt u dat u de PIVOT functie. Met deze functie kunt u de waarden aggregeren en vervolgens converteren naar kolommen.

SET DATEFIRST 1 -- set this so the start of the week is Sunday
select InstanceType,
  sum([39]) as Sep_23, 
  sum([38]) as Sep_16, 
  sum([37]) as Sep_09, 
  sum([36]) as Sep_02, 
  sum([35]) as Aug_26, 
  sum([34]) as Aug_19
from
(
  select SPGI01_INSTANCE_TYPE_C as InstanceType,
    [39], [38], [37], [36], [35], [34]
  from
  (
    select SPGI01_INSTANCE_TYPE_C,
      DatePart(wk, SPGI01_CREATE_S) WeekNo,
      DATEADD(DAY, 7 -DATEPART(WEEKDAY,SPGI01_CREATE_S),SPGI01_CREATE_S) WeekEnd
    from table1
  ) x
  pivot
  (
    count(WeekEnd)
    for weekno in ([39], [38], [37], [36], [35], [34])
  ) p
) x1
group by InstanceType with rollup

Zie SQL Fiddle met demo




  1. hoe een jaar en dag van het jaar te krijgen met behulp van sql-server

  2. Alles behalve één veld selecteren?

  3. Mysql-resultaat krijgen van itemupdate

  4. Vervang een woord in BLOB-tekst door MySQL