我有报告要在两个给定日期之间生成但是我的计算只有在创建日期(在该表上)等于两个给定日期的当前处理值(我不知道该叫什么)时才显示值(我在这里进行加入)
实施例
TranID OrderID Amount CreatedDate
1 1 200 08/12/2011
2 1 100 08/16/2011
2011年8月12日至2011年8月15日之间的报告应显示为
1 1 200 08/12/2011
2 1 0 08/13/2011
3 1 0 08/14/2011
4 1 0 08/15/2011
我不能在选择中使用case语句,因为我没有在语句之间设置数量0。
我的问题可能不太清楚。如果您不理解,请回复
答案 0 :(得分:2)
要显示如下结果,请先使用CTE生成范围内的所有可能日期。
Row Amount CreatedDate
1 200 2011-08-12
2 0 2011-08-13
3 0 2011-08-14
4 0 2011-08-15
CREATE TABLE #temp(TranID INT, OrderID INT, Amount INT, CreatedDate date)
INSERT INTO #temp (TranID, OrderID, Amount, CreatedDate) VALUES (1,1,200 ,'08/12/2011')
INSERT INTO #temp (TranID, OrderID, Amount, CreatedDate) VALUES (2,1,100 ,'08/16/2011')
DECLARE @startDate DATE ,@endDate DATE
Select @startDate = '08/12/2011' , @endDate = '08/15/2011'
;WITH Dates (CreatedDate, RowNumber) AS (
/* Generating all possible dates in the range */
SELECT @startDate AS CreatedDate, 1 AS RowNumber
UNION ALL
SELECT dateadd(d,1,CreatedDate), RowNumber+1 FROM dates WHERE CreatedDate < @endDate
)
SELECT RowNumber, Coalesce(sum(t.Amount),0) AS Amount, d.CreatedDate FROM Dates d
LEFT OUTER JOIN #temp t
ON d.CreatedDate = t.CreatedDate
GROUP BY RowNumber,d.CreatedDate