我无法计算TotalAmount递增数,但是每行迭代的策略数量会增加很多。
例如,请考虑以下代码:
SELECT
Customer.custno,
Customer.enteredDate AS 'Date Entered',
COUNT(BasicPolInfo.polid) AS 'Number of Policies',
SUM( COUNT(BasicPolInfo.polid)) over() AS TotalAmount
FROM Customer
INNER JOIN BasicPolInfo ON Customer.custid = BasicPolInfo.custid
WHERE BasicPolInfo.polid IS NOT NULL
and Customer.firstname IS NOT NULL
AND Customer.enteredDate > '1/1/79'
GROUP BY Customer.custno, Customer.firstname, Customer.lastname, Customer.entereddate
ORDER BY Customer.enteredDate ASC
我希望看到的是从循环每个客户的政策数量中添加TotalAmount列。
例如:
21 -- date -- 6 -- 6
24 -- date -- 13 -- 19
25 -- date -- 23 -- 32
29 -- date -- 16 -- 48
我可能不太关心白痴的顺序,相反,如果总政策甚至是159703,我更关心?此SQL中有超过1000行。
请帮助我如何从前一笔总和中加总每一行!
答案 0 :(得分:1)
在SQL Server 2012转发中,您可以在分析/窗口函数中使用ROWS
来获取正在运行的聚合:
SELECT Customer.custno
, Customer.enteredDate AS 'Date Entered'
, COUNT(BasicPolInfo.polid) AS 'Number of Policies'
, SUM(COUNT(BasicPolInfo.polid)) OVER (ORDER BY Customer.custno ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS TotalAmount
FROM Customer
INNER JOIN BasicPolInfo ON Customer.custid = BasicPolInfo.custid
WHERE BasicPolInfo.polid IS NOT NULL
AND Customer.firstname IS NOT NULL
AND Customer.enteredDate > '1/1/79'
GROUP BY Customer.custno
, Customer.firstname
, Customer.lastname
, Customer.entereddate
ORDER BY Customer.enteredDate ASC
请注意,虽然您不关心订单,但需要ORDER BY
才能确定当前行之前的哪些行。
答案 1 :(得分:0)
看来你正在寻找累计总数。
这可以通过CTE来完成,通过使用"在无限制的预先行和当前行之间行驶来加入表格本身,子查询或截至2012年。在聚合窗口函数中。
这可以使用任何聚合窗口函数来完成。你需要使用
OVER (ORDER BY ______ ORDER BY ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
*请注意,您需要使用order by来指定列的排列。
下面链接到另一个堆栈溢出问题提供了一些明显的例子。