0

私はこのクエリで正確にどこがはっきりしていないのか疑問に思っています。特定の週に機能したすべての個別のRepIDの数を取得したいと思います。これはSQLServer2005にあります。ありがとうございます!!

このクエリにより、1週間の個別のRepIDが得られます。RepIDが2日間のレコードを持っている場合は、2回カウントしたいのですが、特定の日に1つ以上のレコードを持っている場合でも、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)以下は単に`日付にすることができます。

以下は、毎日の内訳を確認する必要がある場合のクエリです。

  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

あなたが問題についてどのように考えるべきかを提案することによってこれに答えさせてください。1日あたりの担当者数を探しています。したがって、クエリにはこのレベルの要約(サブクエリ)が必要です。次に、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

または、担当者が1週間に働いた日数を数えて、次のように合計することもできます。

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)、元の日付が日時である場合にのみ可能です。

于 2012-10-18T15:37:35.017 に答える
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 に答える
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 に答える