0

我想知道这个查询到底在哪里我不清楚。我想获得在特定周内工作的所有不同 RepID 的计数。这是在 SQL Server 2005 中。谢谢!!

此查询为我提供了整周不同的 RepID。如果他在 2 个不同的日子有记录,我想计算 RepID 两次,但即使他在任何特定的日子有超过 1 条记录,我也只计算一次。我希望我很清楚。对不起,我之前不清楚!谢谢!

Select count(distinct(RepID)) as SalesPeople from DailyInfo
where Date > DATEADD(dd, -(DATEPART(dw, @Date)-1), @Date) 
     and Date < DATEADD(dd, 7-(DATEPART(dw, @Date)), @Date)
4

5 回答 5

2

您可以对 RepID+Date 进行唯一组合以使其唯一(SQLFiddle):

  SELECT COUNT(distinct RIGHT(DateDiff(d,0,Date),10)
                       +RIGHT(RepID,10)) as SalesPeople
    FROM DailyInfo
   WHERE Date > DATEADD(dd, -(DATEPART(dw, @Date)-1), @Date)
     AND Date < DATEADD(dd, 7-(DATEPART(dw, @Date)), @Date);

我假设DailyInfo.Date 可以包含时间信息。DateDiff(d,0,Date)您可以在上面交换Date. 同样,CAST(DateDiff(d,0,Date) as datetime)下面可以只是`Date.

如果您需要查看每天的细分,下面是查询。

  SELECT CAST(DateDiff(d,0,Date) as datetime) TheDay,
         COUNT(distinct RepID) as SalesPeople
    FROM DailyInfo
   WHERE Date > DATEADD(dd, -(DATEPART(dw, @Date)-1), @Date)
     AND Date < DATEADD(dd, 7-(DATEPART(dw, @Date)), @Date)
GROUP BY CAST(DateDiff(d,0,Date) as datetime) -- by day
ORDER BY TheDay
于 2012-10-18T15:31:36.847 回答
1

让我通过建议你应该如何思考这个问题来回答这个问题。您正在寻找每天的代表次数。因此,您的查询应该在此级别有一个摘要(子查询)。然后,您可以计算每周的天数。

假设您的日期没有任何时间组件,您可以使用以下内容:

select count(*)
from (select RepId, date as thedate, count(*) as NumOnDay
      from DailyInfo
      group by RepId, date
      where Date > DATEADD(dd, -(DATEPART(dw, @Date)-1), @Date) 
           and Date < DATEADD(dd, 7-(DATEPART(dw, @Date)), @Date)
     ) rd

或者,您可以计算代表在一周内工作的天数,然后将它们相加:

select sum(numdates)
from (select RepId, count(distinct date) as numdates
      from DailyInfo
      group by RepId 
      where Date > DATEADD(dd, -(DATEPART(dw, @Date)-1), @Date) 
           and Date < DATEADD(dd, 7-(DATEPART(dw, @Date)), @Date)
     ) rd

如果您的date字段有时间组件,那么您需要删除时间组件才能使其正常工作。或者使用一些技巧,例如day(date),因为 day 函数将为一周中的每个日期返回不同的值。在更高版本的 SQL Server 中cast(date as date),如果原始日期是 datetime,则可以只使用 。

于 2012-10-18T15:37:35.017 回答
0
Select count(1)
from DailyInfo
group by convert(varchar(10),[date], 120) 
where [put your condition here]
于 2012-10-18T15:40:10.743 回答
0

您可以使用 CTE,但可能会过度杀戮。并且在 CTE 中按天分组,您需要做的就是对总数求和。

WITH cte ([day], total) as
(
    Select DATENAME(DW,[Date]), count(distinct(RepID)) as SalesPeople from DailyInfo
    where [Date] > DATEADD(dd, -(DATEPART(dw, @Date)-1), @Date) and [Date] < DATEADD(dd, 7-(DATEPART(dw, @Date)), @Date)
    GROUP BY DATENAME(DW,[Date])
)
select SUM(total) FROM cte;
于 2012-10-18T15:40:14.357 回答
0

要执行我认为您想要的操作,您需要按天分组,并按周过滤,然后对结果执行不同的操作:

 Select Distinct(RepID) 
 From (Select RepID
       Group By DateDiff(day, 0, Date)
       From DailyInfo
       Where Date > DateAdd(dd, -(DATEPART(dw, @Date)-1), @Date) 
         And Date < DateAdd(dd, 7-(DATEPART(dw, @Date)), @Date)
于 2012-10-18T15:43:56.323 回答