Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como agrupar as datas de cada semana até os últimos seis domingos da semana no sql?


Eu fiz algumas suposições sobre os dados que você postou.

Primeiro, todos os valores que você postou indicam o ano como 2011 mas as datas finais finais como cabeçalhos de coluna não correspondem a 2011 , eles são o Sunday valores para 2012 então alterei os dados. Também a entrada final de Early ASN 8/15/2011 12:00 , acredito que seja um Late ASN caso contrário, os totais a serem correspondidos.

Para obter os resultados, você deseja aplicar o PIVOT função. Esta função permite agregar os valores e depois convertê-los em colunas.
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 with Demo