当SQL在两个值之间进行选择时,找出处理值
我有两个给定日期之间的报告要生成,但我对一列的计算应该显示值,只有当该表上的created Date等于当前处理值时,我不知道两个给定日期的该值叫什么我在这里执行联接 例子当SQL在两个值之间进行选择时,找出处理值,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有两个给定日期之间的报告要生成,但我对一列的计算应该显示值,只有当该表上的created Date等于当前处理值时,我不知道两个给定日期的该值叫什么我在这里执行联接 例子 TranID OrderID Amount CreatedDate 1 1 200 08/12/2011 2 1 100 08/16/2011 2011年12月8日至2011年15月8日之间的报告应显示如下内容 1 1 200 08/12/
TranID OrderID Amount CreatedDate
1 1 200 08/12/2011
2 1 100 08/16/2011
2011年12月8日至2011年15月8日之间的报告应显示如下内容
1 1 200 08/12/2011
2 1 0 08/13/2011
3 1 0 08/14/2011
4 1 0 08/15/2011
我不能在select语句中使用case语句,因为我没有设置amount 0 not by BEVER语句
我的问题可能不清楚。如果您不理解,请回复要显示如下结果,请首先使用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
当前处理值来自哪里?我看不出你在期望结果中使用的逻辑。为什么2011年8月13日将金额设置为0。我已经清楚地提到我不知道当前处理值应该调用什么。让我再次解释一下,我想比较给定值范围和创建日期之间的每个日期。如果匹配,我想显示值,如果不匹配,我想说0。我认为现在您已经编辑了示例数据,这更有意义,但是您想要的结果集不应该有4行吗?