1年的2周期间按星期几总计

时间:2018-12-15 21:57:21

标签: sql sql-server

添加查询(到目前为止)和结果。...

DECLARE @var_StartDate DATETIME
DECLARE @var_EndDate DATETIME

SET @var_StartDate = '11/25/2017' -- Set the start date
SET @var_EndDate = '11/23/2018';  --Set the end date

SELECT
    DATENAME(DW, VTOTALS.APPLYDATE) AS Day,
    FORMAT(SUM(TRANSACTIONS), '#,0.') AS Transactions
FROM 
    VTOTALS
WHERE  
    APPLYDATE BETWEEN @var_StartDate AND @var_EndDate
GROUP BY
    DATENAME(DW, VTOTALS.APPLYDATE)
ORDER BY 
    CASE
       WHEN DATENAME (DW, VTOTALS.APPLYDATE) = 'Sunday'     THEN 1
       WHEN DATENAME (DW, VTOTALS.APPLYDATE) = 'Monday'     THEN 2
       WHEN DATENAME (DW, VTOTALS.APPLYDATE) = 'Tuesday'    THEN 3
       WHEN DATENAME (DW, VTOTALS.APPLYDATE) = 'Wednesday'  THEN 4
       WHEN DATENAME (DW, VTOTALS.APPLYDATE) = 'Thursday'   THEN 5
       WHEN DATENAME (DW, VTOTALS.APPLYDATE) = 'Friday'     THEN 6
       WHEN DATENAME (DW, VTOTALS.APPLYDATE) = 'Saturday'   THEN 7
    END ASC  

输出:

Day                            Transactions
Sunday                         10,697,804
Monday                         25,222,976
Tuesday                        25,001,258
Wednesday                      24,986,845
Thursday                       25,039,354
Friday                         24,591,728
Saturday                       12,087,903

我正在寻找在1年期限内的付款期限的每一天中,按星期几进行的交易总计。我可以获取DOW,但想在11/25/17-11/23/18之间的一年中分为第一周和第二周

Week 1
Sun 1,980
Mon 38,987
Tue 28,132
Wed 30,879
Thu 30,769
Fri 39,902
Sat 41,912
Week 2 
Sun 2,280
Mon 37,987
Tue 29,132
Wed 36,879
Thu 39,769
Fri 42,902
Sat 44,912

有什么想法吗?

谢谢

2 个答案:

答案 0 :(得分:0)

取自某个给定日期以来的天数,并计算X%14。这会将结果除以14,然后返回余数,该余数将是0到13范围内的数字。周日,然后确保指定的日期是周日。

create table VTOTALS
(APPLYDATE date,
[TRANSACTIONS] money)
go
set nocount on
declare @Y int = 0
while @Y < 10000
begin
  insert into VTOTALS(ApplyDate,Transactions)
  values(
  DateAdd(day,  @Y % 1000,
     '2017-01-01T00:00:00.000' ),
  (@Y + 314159)%271828 )
  set @Y=@Y+1
end

go

DECLARE @var_StartDate DATETIME
DECLARE @var_EndDate   DATETIME

SET @var_StartDate = '2017-11-25T00:00:00.000'  -- Set the start date
SET @var_EndDate   = '2018-11-23T00:00:00.000'; -- Set the end date

with VWeeks as
( select 
   DateDiff(day,
            '1899-12-31T00:00:00.000',
            ApplyDate)%14 
   as ZeroToThirteen,
   * from VTOTALS
  WHERE  
    APPLYDATE BETWEEN @var_StartDate AND @var_EndDate )

SELECT
  ZeroToThirteen / 7 + 1 as WeekNum,
  DateName ( DW, DateAdd ( day, 
         ZeroToThirteen,
          '1899-12-31T00:00:00.000'  ) ) as DayName,
  FORMAT(SUM(TRANSACTIONS), '#,0.') AS Transactions
FROM 
  VWeeks
GROUP BY
  ZeroToThirteen
ORDER BY
  ZeroToThirteen

返回

WeekNum     DayName                        Transactions
----------- ------------------------------ ----------------
1           Sunday                         12,307,100
1           Monday                         12,307,360
1           Tuesday                        12,307,620
1           Wednesday                      12,307,880
1           Thursday                       12,308,140
1           Friday                         12,308,400
1           Saturday                       12,308,660
2           Sunday                         12,308,920
2           Monday                         12,309,180
2           Tuesday                        12,309,440
2           Wednesday                      12,309,700
2           Thursday                       12,309,960
2           Friday                         12,310,220
2           Saturday                       12,306,840

答案 1 :(得分:0)

您想要从星期日开始的几周,因此可以在mode中使用week参数。如果您只需要一年的值:

select week(dte, 0), sum(total)
from t
where dte >= '2017-01-01' and dte < '2018-01-01'  -- or however you define "year"
group by week(dte, 0);