Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak pogrupować według dat każdego tygodnia do ostatnich sześciu tygodni w niedziele w sql?

Zrobiłem kilka założeń dotyczących danych, które zamieściłeś.

Po pierwsze, wszystkie opublikowane przez Ciebie wartości określają rok jako 2011 ale ostateczne daty zakończenia jako nagłówki kolumn nie odpowiadają 2011 , są to Sunday wartości dla 2012 więc zmieniłem dane. Również ostatni wpis Early ASN 8/15/2011 12:00 , uważam, że powinien być Late ASN wpis w przeciwnym razie sumy do wykonania się zgadzają.

Aby uzyskać wyniki, chcesz zastosować PIVOT funkcjonować. Ta funkcja pozwala agregować wartości, a następnie konwertować je na kolumny.

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

Zobacz SQL Fiddle z wersją demonstracyjną




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Różnica między liczbami, liczbami zmiennoprzecinkowymi i dziesiętnymi w SQL Server

  2. Zaszyfrowane kolumny SQL w klauzuli WHERE

  3. Jeszcze raz:procedura składowana a TV-UDF

  4. Nieemocjonalne logiczne spojrzenie na konwencje nazewnictwa SQL Server

  5. Zmień typ danych kolumny za pomocą klucza podstawowego