sql >> Databasteknik >  >> RDS >> Sqlserver

Hur grupperar jag efter datum för varje vecka upp till de senaste sex veckorna söndagar i sql?

Jag gjorde några antaganden om de uppgifter du publicerade.

Först anger alla värden som du har lagt upp året som 2011 men de sista slutdatumen som kolumnrubriker motsvarar inte 2011 , de är Sunday värden för 2012 så jag ändrade uppgifterna. Även den sista posten av Early ASN 8/15/2011 12:00 , tror jag är tänkt att vara ett Late ASN annars stämmer summan som ska göras överens.

För att få resultaten vill du använda PIVOT fungera. Med den här funktionen kan du aggregera värdena och sedan konvertera dem till kolumner.

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-fiol med demo




  1. Modellera en öppen marknadsplats för utbildning

  2. Töm RELIES_ON för RESULT_CACHE

  3. Vad är subqueries i oracle

  4. Använder sp_help_schedule i SQL Server