sql >> Databáze >  >> RDS >> Sqlserver

Jak seskupit podle dat každého týdne až po posledních šest týdnů neděle v SQL?

Udělal jsem několik předpokladů ohledně údajů, které jste zveřejnili.

Za prvé, všechny hodnoty, které jste zveřejnili, uvádějí rok jako 2011 ale konečná data ukončení jako záhlaví sloupců neodpovídají 2011 , jsou Sunday hodnoty pro 2012 tak jsem údaje upravil. Také poslední záznam z Early ASN 8/15/2011 12:00 , domnívám se, že má být Late ASN jinak se součty, které se mají udělat, shodují.

Chcete-li získat výsledky, budete chtít použít PIVOT funkce. Tato funkce umožňuje agregovat hodnoty a poté je převést na sloupce.

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

Viz SQL Fiddle s ukázkou




  1. pokud tabulka neexistuje, proveďte dlouhý dotaz

  2. Jsou tyto znaky platné pro XML?

  3. SQL dotaz, výběr 5 nejnovějších v každé skupině

  4. min(sloupec) mi nevrací správná data jiných sloupců