Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment regrouper les dates des dimanches de chaque semaine jusqu'aux six dernières semaines en sql?

J'ai fait quelques hypothèses sur les données que vous avez publiées.

Tout d'abord, les valeurs que vous avez affichées indiquent toutes l'année sous la forme 2011 mais les dates de fin définitives en en-tête de colonne ne correspondent pas à 2011 , ce sont les Sunday valeurs pour 2012 donc j'ai modifié les données. Aussi l'entrée finale de Early ASN 8/15/2011 12:00 , je crois que c'est censé être un Late ASN entrée sinon les totaux à faire correspondent.

Pour obtenir les résultats, vous voudrez appliquer le PIVOT fonction. Cette fonction vous permet d'agréger les valeurs puis de les convertir en colonnes.

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

Voir SQL Fiddle avec démo