当SQL在两个值之间执行选择时,找出处理值

时间:2011-08-29 08:09:55

标签: sql sql-server tsql

我有报告要在两个给定日期之间生成但是我的计算只有在创建日期(在该表上)等于两个给定日期的当前处理值(我不知道该叫什么)时才显示值(我在这里进行加入)

实施例

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。

我的问题可能不太清楚。如果您不理解,请回复

1 个答案:

答案 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