gpt4 book ai didi

sql - 使用SQL获取达到配额的记录

转载 作者:行者123 更新时间:2023-12-03 03:43:09 24 4
gpt4 key购买 nike

达成配额的记录如下: 30:

ContractNos   Sale    SaleDate    Agent
1 10 01/01/16 A
2 20 01/10/16 A
3 20 01/10/16 A
4 10 01/11/16 A
5 40 01/20/16 B
6 20 01/21/16 C
7 30 01/22/16 C
8 10 01/23/16 C

如何获取每个代理商的销售记录,其中其销售达到一定的配额,即按 SaleDate 升序排列 30 个订单。理想的结果一定是这样的:

ContractNos   Sale    SaleDate    Agent
1 10 01/01/16 A -> ADD THIS
2 20 01/10/16 A -> RECORD = 30 achieved the quota
3 20 01/10/16 A
4 10 01/11/16 A
5 40 01/20/16 B -> Quota is achieved which is 30
6 20 01/21/16 C -> ADD THIS
7 30 01/22/16 C -> RECORD = 50 achieved the quota
8 10 01/23/16 C

最终结果

ContractNos   Sale    SaleDate    Agent
1 10 01/01/16 A
2 20 01/10/16 A
5 40 01/20/16 B
6 20 01/21/16 C
7 30 01/22/16 C

最佳答案

遗憾的是,Sql Server 2008 不支持 Sum() Over(order by) 窗口函数来计算运行总计。

使用关联子查询方法计算运行总计

试试这个

SELECT ContractNos,
Sale,
SaleDate,
Agent
FROM (SELECT (SELECT Sum([Sale])
FROM yourtable b
WHERE a.[Agent] = b.[Agent]
AND a.[ContractNos] >= b.[ContractNos]) run_sum,*
FROM yourtable a) c
WHERE run_sum - sale < 30

或使用交叉应用

SELECT ContractNos,
Sale,
SaleDate,
Agent
FROM (SELECT *
FROM yourtable a
CROSS apply (SELECT Sum([Sale])
FROM yourtable b
WHERE a.[Agent] = b.[Agent]
AND a.[ContractNos] >= b.[ContractNos]) c(run_sum)) a
WHERE run_sum - sale < 30

对于 Sql Server 2012+ 使用此

SELECT ContractNos,
Sale,
SaleDate,
Agent
FROM (SELECT Sum([Sale])OVER(partition BY [Agent] ORDER BY [ContractNos]) run_sum,*
FROM yourtable) a
WHERE run_sum - sale < 30

关于sql - 使用SQL获取达到配额的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38047219/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com