Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm thế nào để nhóm theo từng tuần cho đến các ngày chủ nhật trong sáu tuần trước trong sql?

Tôi đã đưa ra một vài giả định về dữ liệu mà bạn đã đăng.

Đầu tiên, tất cả các giá trị bạn đã đăng đều ghi vào năm là 2011 nhưng ngày kết thúc cuối cùng làm tiêu đề cột không tương ứng với 2011 , chúng là Sunday giá trị cho 2012 vì vậy tôi đã thay đổi dữ liệu. Cũng là mục nhập cuối cùng của Early ASN 8/15/2011 12:00 , Tôi tin rằng nó phải là một Late ASN nếu không thì các tổng số cần làm sẽ khớp với nhau.

Để nhận được kết quả, bạn muốn, bạn sẽ muốn áp dụng PIVOT hàm số. Chức năng này cho phép bạn tổng hợp các giá trị và sau đó chuyển đổi chúng thành các cột.

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

Xem SQL Fiddle with Demo




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhận ngày bắt đầu và ngày kết thúc trong tuần? Trong máy chủ Sql?

  2. Sự cố truy vấn vùng tên Xml của SQL Server

  3. Tách chuỗi bằng dấu phẩy trong SQL Server 2008

  4. Thay đổi mật khẩu khi đăng nhập SA trong SQL Server (Ví dụ T-SQL)

  5. Trả về loại của trình kích hoạt DML trên bảng trong SQL Server