Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да групирате по всяка седмица до последните шест седмични неделни дати в sql?

Направих няколко предположения относно данните, които публикувахте.

Първо, всички стойности, които сте публикували, посочват годината като 2011 но крайните крайни дати като заглавки на колони не съответстват на 2011 , те са Sunday стойности за 2012 така че промених данните. Също така последният запис от Early ASN 8/15/2011 12:00 , смятам, че трябва да е Late ASN запис, в противен случай общите суми съвпадат.

За да получите желаните резултати, трябва да приложите PIVOT функция. Тази функция ви позволява да обобщавате стойностите и след това да ги конвертирате в колони.

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

Вижте SQL Fiddle с демонстрация




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да вмъкна 10 милиона записа за възможно най-кратко време?

  2. Връщане на всички чужди ключове и ПРОВЕРКА на ограничения в база данни на SQL Server (T-SQL примери)

  3. SQL:Обединение на многоъгълници

  4. Какво означава ON [ОСНОВНО]?

  5. дублиране на нарушение на нулева стойност на ограничение UNIQUE KEY в Mssql