0

在下面的 while 循环中,变量@total的结果与NULL从表中添加选定值时一样。如果不添加,则结果显示为表中的选定值,但仅显示最后一行的值。

SET @coundDate = '1/1/2012';

WHILE ( Datepart(dd, @countDate) < Datepart(dd, @endDate) )
  BEGIN
      SET @total = @total + (SELECT Cast([7am] AS INT) + 
                                    Cast([8am]AS INT) AS TotalHitCount
                             FROM   Sale
                             WHERE  TransactionDate = @countDate);
      SET @countDate = Dateadd(d, 1, @countDate);
  END;

SELECT @total 

我现在很困惑。那是什么错误?

4

2 回答 2

1

您必须使用默认值(例如 0 )预先初始化您的变量 :)

于 2012-10-29T08:18:51.773 回答
1

正如 Martin 指出的那样,您可以将整个查询编写为简单的SUM

SELECT SUM(Cast([7am] AS INT) + Cast([8am]AS INT)) AS Total
FROM   Sale
WHERE  TransactionDate between '20120101' and @endDate

虽然我会询问为什么7am并且8am还不int是。

于 2012-10-29T08:30:03.040 回答