上周、当月和年度的总销售额-SQL

上周、当月和年度的总销售额-SQL,sql,sql-server,select,Sql,Sql Server,Select,你如何找到销售人员每周、每月和每年的总销售额 SELECT AdjusterName, SUM(CASE WHEN TaskDate >= DATEADD(WEEK, DATEDIFF(WEEK, 0, SYSDATETIME()), 0) AND TaskDate < DATEADD(WEEK, DATEDIFF(WEEK, 0, SYSDATETIME()) + 1, 0) THEN 1 ELSE 0 END)

你如何找到销售人员每周、每月和每年的总销售额

  SELECT AdjusterName,    
   SUM(CASE WHEN TaskDate >= DATEADD(WEEK, DATEDIFF(WEEK, 0, SYSDATETIME()), 0)
            AND  TaskDate <  DATEADD(WEEK, DATEDIFF(WEEK, 0, SYSDATETIME()) + 1, 0)
            THEN 1 ELSE 0 END) AS WTD,
   sum(case when MONTH(TaskDate) = MONTH(GetDate()) then 1 else 0 end ) as MTD, 
   sum(case when year(TaskDate) = year(GetDate()) then 1 else 0 end ) as YTD

FROM   cte
GROUP BY AdjusterName
样本数据

ID          SalesPerson    NAME                            TaskDate    TaskAge DocumentType                TaskStatus  OverdueCheck

2000378     Willy           Akron FNOL Supervisor Team 1    2015-02-04  1258    Claim.Reassigned.File.Text  Completed   WithinSLA
2000378     Amanda          Akron FNOL Supervisor Team 1    2015-02-04  1258    ClaimLifecycle.Open.RD.Text Completed   WithinSLA
2000388     Amanda          Akron FNOL Supervisor Team 1    2016-08-06  709     ClaimLifecycle.Open.RD.Text Completed   WithinSLA
2000388     Willy           Akron FNOL Supervisor Team 1    2016-08-06  709     Claim.Reassigned.File.Text  Completed   WithinSLA
2000388     Schutz          Akron FNOL Supervisor Team 1    2016-09-21  663     ISO.Failure.Diary.Text:     Completed   WithinSLA
2000388     Stephannie      Akron FNOL Supervisor Team 1    2016-09-26  658     Claim.Reassigned.File.Text  Completed   WithinSLA

Count
ignore
null
s,因此您可以在上周和月份的
case
表达式上使用
Count
调用。年度条件可在
中表达,其中
条款:

SELECT   SalesPerson,
         COUNT(CASE DATEDIFF(WEEK,  TaskDate, GETDATE()) = 0 THEN 1 END) AS WTD,
         COUNT(CASE DATEDIFF(MONTH, TaskDate, GETDATE()) = 0 THEN 1 END) AS MTD,
         COUNT(*)
FROM     mytable
WHERE    DATEDIFF(YEAR, TaskDate, GETDATE()) = 0
GROUP BY SalesPerson

如果您希望在列中显示年、月、周的结果,可以使用窗口功能实现:

declare @test table (ID int, SalesPerson nvarchar(100), [Name] nvarchar(100), TaskDate date, TaskAge int, DocumentType nvarchar(max), TaskStatus nvarchar(20), OverdueCheck nvarchar(20))

insert into @test values
  (2000378, 'Willy'     , 'Akron FNOL Supervisor Team 1', '2015-02-04', 1258, 'Claim.Reassigned.File.Text ', 'Completed', 'WithinSLA')
, (2000378, 'Amanda'    , 'Akron FNOL Supervisor Team 1', '2015-02-04', 1258, 'ClaimLifecycle.Open.RD.Text', 'Completed', 'WithinSLA')
, (2000388, 'Amanda'    , 'Akron FNOL Supervisor Team 1', '2016-08-06', 709 , 'ClaimLifecycle.Open.RD.Text', 'Completed', 'WithinSLA')
, (2000388, 'Willy'     , 'Akron FNOL Supervisor Team 1', '2016-08-06', 709 , 'Claim.Reassigned.File.Text ', 'Completed', 'WithinSLA')
, (2000388, 'Schutz'    , 'Akron FNOL Supervisor Team 1', '2016-09-21', 663 , 'ISO.Failure.Diary.Text:    ', 'Completed', 'WithinSLA')
, (2000388, 'Stephannie', 'Akron FNOL Supervisor Team 1', '2016-09-26', 658 , 'Claim.Reassigned.File.Text ', 'Completed', 'WithinSLA')

select SalesPerson
    , Year(TaskDate) as [Year]
    , month(taskdate) as [Month]
    , DATEPART( wk, taskdate) as [Week]
    , count(*) over (Partition by salesperson, Year(taskdate)) as [YearCount]
    , count(*) over (Partition by salesperson, Year(taskdate), Month(taskdate)) as [MonthCount]
    , count(*) over (Partition by salesperson, Year(taskdate), DATEPART( wk, taskdate)) as [WeekCount]
from @test

这对我有用!谢谢大家的建议和时间

    select AdjusterName, NAME,
            sum(case when DATEPART( wk,TaskDate)  =  DATEPART ( wk, getdate()) and YEAR(taskDate) = 2018  then 1 else 0 end ) as WTD, 
            sum(case when DATEPART (m, TaskDate ) =  DATEPART ( m, getdate()) and YEAR(taskDate) = 2018  then 1 else 0 end ) as MTD, 
            sum(case when DATEPART (YEAR, TaskDate) =  DATEPART ( YEAR, getdate()) and YEAR(taskDate) = 2018  then 1 else 0 end ) as YTD

            from cte
            group by AdjusterName,NAME

. 可能需要将其与。我们无法提供更多细节,因为我们没有。您需要提供一些实际的样本数据。否则,
SELECT*FROM TABLE
从提供的数据集中选择。您对示例数据的预期结果是什么?到目前为止您尝试了什么?包括上面的查询,但不确定我是否正确地处理了它,在“=”附近得到了不正确的语法。getdate()=0)之后出错@BuddyCool hmm。。。忘了一半的表情。不知道我想到了什么:-(已编辑并修复-立即尝试。为什么要将年分区包括月??
    select AdjusterName, NAME,
            sum(case when DATEPART( wk,TaskDate)  =  DATEPART ( wk, getdate()) and YEAR(taskDate) = 2018  then 1 else 0 end ) as WTD, 
            sum(case when DATEPART (m, TaskDate ) =  DATEPART ( m, getdate()) and YEAR(taskDate) = 2018  then 1 else 0 end ) as MTD, 
            sum(case when DATEPART (YEAR, TaskDate) =  DATEPART ( YEAR, getdate()) and YEAR(taskDate) = 2018  then 1 else 0 end ) as YTD

            from cte
            group by AdjusterName,NAME