Sql 如何汇总给定周和每个工作日的总数?

Sql 如何汇总给定周和每个工作日的总数?,sql,sql-server,tsql,count,aggregate,Sql,Sql Server,Tsql,Count,Aggregate,我目前正在尝试构建逻辑,根据报告运行的日期,该逻辑将独立计算当前一周中的每一天。我需要弄清楚如何构建一个查询,将每天和每周的总和作为单独的列进行聚合 下面我只提供了我将用于总计和星期日的子查询: DECLARE @SundayOfCurrentWeek date , @MondayOfCurrentWeek date , @TuesdayOfCurrentWeek date , @WednesdayOfCurrentWeek date , @ThursdayOfCurrentWeek da

我目前正在尝试构建逻辑,根据报告运行的日期,该逻辑将独立计算当前一周中的每一天。我需要弄清楚如何构建一个查询,将每天和每周的总和作为单独的列进行聚合

下面我只提供了我将用于总计和星期日的子查询:

DECLARE 
@SundayOfCurrentWeek date
, @MondayOfCurrentWeek  date
, @TuesdayOfCurrentWeek  date
, @WednesdayOfCurrentWeek date
, @ThursdayOfCurrentWeek date
, @FridayOfCurrentWeek date
, @SaturdayOfCurrentWeek date
set @SundayOfCurrentWeek = DATEADD(wk, DATEDIFF(wk,0,getdate()), -1)
set @MondayOfCurrentWeek =  DATEADD(wk, DATEDIFF(wk,0,getdate()), 0) 
set @TuesdayOfCurrentWeek =  DATEADD(wk, DATEDIFF(wk,0,getdate()), 1) 
set @WednesdayOfCurrentWeek =  DATEADD(wk, DATEDIFF(wk,0,getdate()), 2) 
set @ThursdayOfCurrentWeek =  DATEADD(wk, DATEDIFF(wk,0,getdate()), 3) 
set @FridayOfCurrentWeek =  DATEADD(wk, DATEDIFF(wk,0,getdate()), 4) 
set @SaturdayOfCurrentWeek =  DATEADD(wk, DATEDIFF(wk,0,getdate()), 5)
/**选择一周内的总记录**/

( select count(*) 
from release 
where releasetime >= @SundayOfCurrentWeek 
AND releasetime <= @SaturdayOfCurrentWeek ) as TotalCount 
/**选择截至星期日的所有记录**/

( select count(*) as SundayCount
from release 
where releasetime >= @SundayOfCurrentWeek 
AND releasetime < @MondayOfCurrentWeek ) as SundayCount
试试这个

SELECT 
DATEPART(DW, [date_col]) AS 'Day_of_Week', 
COUNT(*) AS 'Count_per_Day'
FROM [Table]
GROUP BY DATEPART(DW, [date_col])
请注意,星期天=1表示星期天,7表示星期六

;WITH cte AS (
    SELECT
       DATENAME(dw,releasetime) as DayOfWeekName
       ,COUNT(*) OVER () as TotalCount
    FROM
       @release
    WHERE
       releasetime >= DATEADD(DAY,- DATEPART(dw,GETDATE()) + 1,CAST(GETDATE() AS DATE)) 
       AND releasetime < DATEADD(DAY,7 - DATEPART(dw,GETDATE()) + 1,CAST(GETDATE() AS DATE))
)

SELECT *
FROM
    cte
    PIVOT (
       COUNT(DayOfWeekName)
       FOR DayOfWeekName IN (Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday)
    ) p
绝对推荐熟悉窗口功能

编辑,更改where语句中的日期比较。它将自动计算出本周的星期日,然后计算出下周的星期日。下个星期的星期天的原因是我把它从
COUNT(*) OVER (ORDER BY DATEPART(dw,releasetime))