上周、当月和年度的总销售额-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
ignorenull
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