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

Wie gruppiert man nach den Daten jeder Woche bis zu den Sonntagen der letzten sechs Wochen in SQL?

Ich habe einige Annahmen zu den von Ihnen geposteten Daten getroffen.

Erstens geben die von Ihnen geposteten Werte alle das Jahr als 2011 an aber die endgültigen Enddaten als Spaltenüberschriften entsprechen nicht 2011 , sie sind der Sunday Werte für 2012 Also habe ich die Daten geändert. Auch der letzte Eintrag von Early ASN 8/15/2011 12:00 , soll meiner Meinung nach eine Late ASN sein Eintrag ansonsten stimmen die zu erledigenden Summen überein.

Um die Ergebnisse zu erhalten, sollten Sie den PIVOT Funktion. Mit dieser Funktion können Sie die Werte aggregieren und sie dann in Spalten umwandeln.

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

Siehe SQL Fiddle mit Demo