Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当SQL在两个值之间进行选择时,找出处理值_Sql_Sql Server_Tsql - Fatal编程技术网

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

当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/

我有两个给定日期之间的报告要生成,但我对一列的计算应该显示值,只有当该表上的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/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行吗?