私は次のような結果を持って(ときレコードなしのギャップを埋める)
Date | EmployeeID
2015-11-18 | 1
2015-11-18 | 1
2015-11-18 | 1
2015-11-19 | 1
2015-11-19 | 1
2015-11-20 | 1
2015-11-20 | 1
2015-11-20 | 1
2015-11-25 | 1
しかし、日付の範囲(2015年11月15日 - 2015年11月30日)を与え、私がしたいです私はデータのみで、テーブルから値を取得することで、私はこのアプローチを使用してきたこの
Date | NbEmployees
2015-11-15 | 0
2015-11-16 | 0
2015-11-17 | 0
2015-11-18 | 3
2015-11-19 | 2
2015-11-20 | 3
2015-11-21 | 0
2015-11-22 | 0
2015-11-23 | 0
2015-11-24 | 0
2015-11-25 | 1
2015-11-26 | 0
2015-11-27 | 0
2015-11-28 | 0
2015-11-29 | 0
2015-11-30 | 0
のような表示に何か
DECLARE @StartDate DATE = '2015-11-15 00:00:00', @EndDate DATE = '2015-11-30 23:59:00'
DECLARE @CurrentDate DATE = @StartDate
DECLARE @DateRange TABLE (CurrentDate DATETIME)
WHILE(@CurrentDate <= @EndDate)
BEGIN
INSERT INTO @DateRange VALUES(@CurrentDate)
SET @CurrentDate = DATEADD(DAY, 1, @CurrentDate)
END
SELECT r.CurrentDate, COUNT(EmployeeID)
FROM Employee e
RIGHT JOIN @DateRange r ON e.HireDate = r.Date
結果:
Date | NbEmployees
2015-11-18 | 3
2015-11-19 | 2
2015-11-20 | 3
2015-11-25 | 1
通常、最も簡単な方法は、カレンダーテーブル(1日に1行)を作成し、それをあなたのクエリと結合することです。 –
それは私がやったことです。私のサンプルコードを見てください。私のカレンダーは@DateRangeです –
どのバージョンのSQL Serverですか? – Shnugo