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

Hvordan grupperes efter hver uge op til sidste seks ugers søndagsdatoer i sql?

Jeg lavede et par antagelser om de data, du postede.

For det første angiver alle de værdier, du har sendt, året som 2011 men de endelige slutdatoer som kolonneoverskrifter svarer ikke til 2011 , de er Sunday værdier for 2012 så jeg ændrede dataene. Også den sidste indtastning af Early ASN 8/15/2011 12:00 , tror jeg formodes at være en Late ASN indtastning ellers stemmer overens med totalerne.

For at få de resultater, du ønsker, skal du anvende PIVOT fungere. Denne funktion giver dig mulighed for at aggregere værdierne og derefter konvertere dem til kolonner.

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

Se SQL Fiddle with Demo




  1. Minimalt eksempel på brug af vælg... til opdatering for at isolere rækker

  2. PHP MySQL-forespørgsel Hvor x =$variabel

  3. Kald PHP-variabler inde fra en MySQL-database

  4. UTL_MATCH-lignende funktion til at arbejde med CLOB