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

Come raggruppare in base alle date delle domeniche di ogni settimana fino alle ultime sei settimane in sql?

Ho fatto alcune ipotesi sui dati che hai pubblicato.

Innanzitutto, i valori che hai pubblicato indicano tutti l'anno come 2011 ma le date di fine finali come intestazioni di colonna non corrispondono a 2011 , sono la Sunday valori per 2012 quindi ho modificato i dati. Anche l'ultima iscrizione di Early ASN 8/15/2011 12:00 , credo dovrebbe essere un Late ASN inserire altrimenti i totali da fare combaciare.

Per ottenere i risultati, ti consigliamo di applicare il PIVOT funzione. Questa funzione ti permette di aggregare i valori e poi convertirli in colonne.

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

Vedi SQL Fiddle con demo