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

SQL Server để đếm số lần một giá trị xuất hiện giữa nhiều phạm vi ngày và so sánh với các tuần trước đó

Tôi nghĩ điều này có thể cung cấp cho bạn những gì bạn đang tìm kiếm:

;WITH 
weekcounts AS (
    SELECT Time_Stamp, Emp_ID, [Balance], ROUND(CONVERT(FLOAT,[Balance]) / 60.0,2) AS [Hours], DATEPART(week, Time_Stamp) AS int_week FROM newSampleData
)

,counts AS (
    SELECT Emp_ID, int_week, 1 AS int_count
    FROM weekcounts
    WHERE ([Hours] >= 7.5)
    UNION ALL
    SELECT weekcounts.Emp_ID, weekcounts.int_week, 1 AS int_count
    FROM weekcounts
        INNER JOIN counts
            ON weekcounts.Emp_ID = counts.Emp_ID
            AND (weekcounts.int_week - 1) = counts.int_week
            AND ([Hours] >= 7.5)
)

,countsagg AS (
    SELECT Emp_ID, int_week, SUM(int_count) AS int_count
    FROM counts
    GROUP BY Emp_ID, int_week
)

SELECT Emp_ID, 
       ISNULL([29],0) AS [week 29],
       ISNULL([30],0) AS [week 30],
       ISNULL([31],0) AS [week 31],
       ISNULL([32],0) AS [week 32],
       ISNULL([33],0) AS [week 33] 
FROM countsagg
PIVOT (MAX(int_count) FOR int_week IN ([29],[30],[31],[32],[33])) piv

Ngoài ra, nếu Số dư là một varchar, bạn đang thực hiện nhiều chuyển đổi hơn mức cần thiết trong mã của bạn được cung cấp. Điều này sẽ cho kết quả trong nhiều giờ với ít mã hơn:

ROUND(CONVERT(FLOAT,[Balance]) / 60.0,2)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Varchar (-1) có nghĩa là gì?

  2. Cách tìm các hàng bằng cách lọc một văn bản cụ thể bằng cách sử dụng Tìm kiếm toàn văn trong MS SQL 2012

  3. SQL AVG () Trả về kết quả sai cho 3 cột

  4. Trả về danh sách các sự kiện kích hoạt máy chủ trong SQL Server

  5. Cách khắc phục lỗi Msg 7325 trong SQL Server:"Đối tượng hiển thị cột có loại CLR không được phép trong truy vấn phân tán"