上下文 - 我对SQL很陌生。我得到了基础知识,并且围绕着基本的连接,但我还没有完全建立自己的基本选择之外的查询。 我有以下表格布局:
Site Date Cash_1 Sales_1
4 10/04/2017 £1,500 £1,500
4 09/04/2017 NULL £1,000
4 08/04/2017 NULL £2,000
4 07/04/2017 NULL £1,000
4 06/04/2017 £5,000 £1,000
如您所见,本网站06/04至09/04之间的(示例)累计销售总额为06/04的现金金额。
这种情况发生在网站4未能及时上传其现金声明时 - 后续日期汇总在一个单独的声明中,该声明的日期为无法上传的第一天。
我希望尝试获得的内容如下所示。我们的想法是累积列将显示自上次成功导入现金报表以来的总销售额,这将有助于进行余额检查。
Site Date Cash_1 Sales_1 Cumulative
4 10/04/2017 £1,500 £1,500 £1,500
4 09/04/2017 NULL £1,000 £5,000
4 08/04/2017 NULL £2,000 £4,000
4 07/04/2017 NULL £1,000 £2,000
4 06/04/2017 £5,000 £1,000 £1,000
我可以使用" SUM(Y)作为X"在标准意义上创建一个累积列,但我无法根据其他列值重新设置如何重置累积。
答案 0 :(得分:1)
尝试使用 ROW_NUMBER()和更新声明,如下所示:
DECLARE @tblTest as Table(
SiteNo INT,
[Date] Date,
Cash INT,
Sales INT
)
INSERT INTO @tblTest VALUES(4,'10-Apr-2017',1500,1500)
INSERT INTO @tblTest VALUES(4,'09-Apr-2017',NULL,1000)
INSERT INTO @tblTest VALUES(4,'08-Apr-2017',NULL,2000)
INSERT INTO @tblTest VALUES(4,'07-Apr-2017',NULL,1000)
INSERT INTO @tblTest VALUES(4,'06-Apr-2017',5000,1000)
;With T AS
(
SELECT
*,
NULL AS Cumulative,
ROW_NUMBER() OVER(ORDER BY Date) AS RowNo
FROM @tblTest
)
SELECT
*
INTO #tblTest
FROM T
ORDER BY RowNo
DECLARE @sum INT=0
Update #tblTest
SET @sum=Cumulative=Sales+ CASE WHEN Cash IS NULL THEN @sum ELSE 0 END
SELECT * FROM #tblTest ORDER BY RowNo DESC
DROP TABLE #tblTest