如果条件计算量如何使用SQL窗口函数?

时间:2016-12-06 10:15:51

标签: sql sql-server sql-server-2012

表A

╔═════╦════════════╦════════╗
║ ID  ║    Date    ║ Amount ║
╠═════╬════════════╬════════╣
║ 100 ║ 01/07/2016 ║     50 ║
║ 100 ║ 02/07/2016 ║     60 ║
║ 100 ║ 03/07/2016 ║     70 ║
║ 100 ║ 04/07/2016 ║    100 ║
║ 100 ║ 05/07/2016 ║    450 ║
║ 101 ║ 01/07/2016 ║     50 ║
║ 101 ║ 02/07/2016 ║     70 ║
║ 101 ║ 03/07/2016 ║    150 ║
║ 102 ║ 01/07/2016 ║     30 ║
║ 102 ║ 02/07/2016 ║     40 ║
║ 102 ║ 03/07/2016 ║     60 ║
║ 104 ║ 01/07/2016 ║    200 ║
║ 104 ║ 02/07/2016 ║    300 ║
║ 104 ║ 03/07/2016 ║    500 ║
╚═════╩════════════╩════════╝

表B

╔═════╦════════════╦════════════╗
║ ID  ║    Date    ║ MoveAmount ║
╠═════╬════════════╬════════════╣
║ 100 ║ 01/07/2016 ║        260 ║
║ 100 ║ 02/07/2016 ║        400 ║
║ 101 ║ 02/07/2016 ║         30 ║
║ 101 ║ 03/07/2016 ║         70 ║
║ 103 ║ 02/07/2016 ║         10 ║
║ 104 ║ 02/07/2016 ║        200 ║
╚═════╩════════════╩════════════╝

结果

╔═══════════╦═══════════════╦═══════════════╦════════════╗
║ TableA_ID ║ TableA_Amount ║ TableB_Amount ║ Difference ║
╠═══════════╬═══════════════╬═══════════════╬════════════╣
║       100 ║ 400           ║ 400           ║ 0          ║
║       101 ║ 100           ║ 100           ║ 0          ║
║       102 ║ NULL          ║ NULL          ║ NULL       ║
║       104 ║ 300           ║ 200           ║ 100        ║
╚═══════════╩═══════════════╩═══════════════╩════════════╝

如何编写脚本以获得我想要的结果?

条件:

1)如果表A和表B中的最小日期相同,则将表B中的所有金额加起来,用表B中的min(日期)加上金额,ELSE加上表B中的所有金额。 / p>

2)然后将总和与表A中的最大值(日期) - 最小值(日期)进行比较。

1 个答案:

答案 0 :(得分:0)

我认为很少有交叉应用可以做到这一点。如果有更聪明的方法可以做到这一点,祝你好运!

float