sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo agrupar por cada semana hasta las últimas seis semanas los domingos en sql?

Hice algunas suposiciones sobre los datos que publicaste.

Primero, todos los valores que publicaste indican el año como 2011 pero las fechas finales finales como encabezados de columna no corresponden a 2011 , son los Sunday valores para 2012 así que alteré los datos. También la entrada final de Early ASN 8/15/2011 12:00 , creo que se supone que es un Late ASN de lo contrario, los totales a hacer coincidirán.

Para obtener los resultados, querrá aplicar el PIVOT función. Esta función le permite agregar los valores y luego convertirlos en columnas.

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

Consulte SQL Fiddle con demostración