我有一个数据集,我是根据一些子查询创建的,这些子查询需要跟踪资助金额和收取的金额。
当前数据:
QuarterDiff ActivationYear ActivationQuarter AmountFinanced ChargeOffAmount
0 2015 1 83831.00 19600.00
1 2015 1 NULL 0.00
2 2015 1 NULL 0.00
3 2015 1 NULL 0.00
4 2015 1 NULL 0.00
我遇到的问题是AmountFinanced
的以下数据不应该是NULL
,而是重复QuarterDiff
0 AmountFinanced
值。有没有办法让QuarterDiff
0 AmountFinanced
的值填充到以下QuarterDiff
中?
所需结果(适用于ActivationYear
2015,ActivationQuarter
1):
QuarterDiff ActivationYear ActivationQuarter AmountFinanced ChargeOffAmount
0 2015 1 83831.00 19600.00
1 2015 1 83831.00 0.00
2 2015 1 83831.00 0.00
3 2015 1 83831.00 0.00
4 2015 1 83831.00 0.00
答案 0 :(得分:0)
此问题的快速解决方案是使用 AmountFinanced 列的子查询,如下所示
select QuarterDiff,
ActivationYear,
ActivationQuarter,
(select AmountFinanced
from Finance_Table
where QuarterDiff = 0
) as AmountFinanced,
ChargeOffAmount
from Finance_Table
这仅适用于季度和激活年份不会改变的情况,因为您知道应该使用的QuarterDiff来填充AmountFinanced,即QuarterDiff 0。
您可能面临的一个更难的问题涉及多年和季度,例如此表。
QuarterDiff ActivationYear ActivationQuarter AmountFinanced ChargeOffAmount
0 2015 1 83831.00 19600.00
1 2015 1 NULL 0.00
2 2015 1 NULL 0.00
3 2015 2 76931.00 0.00
4 2015 2 NULL 0.00
5 2015 3 101263.00 0.00
6 2015 3 NULL 0.00
7 2015 3 NULL 0.00
8 2015 4 99754.00 0.00
9 2016 1 69414.00 0.00
10 2016 2 88200.00 0.00
11 2016 2 NULL 0.00
12 2016 2 NULL 0.00
13 2016 2 NULL 0.00
这个并不容易,因为您不能只选择QuarterDiff 0来填充表格的其余部分。您想从给定年份和季度的领先记录中选择AmountFinanced。相反,我们可以使用相关子查询的聚合,这利用了AmountFinanced字段中的数据;也就是说,需要填充的那些是空的,因此它们不会干扰任何聚合。
select QuarterDiff,
ActivationYear,
ActivationQuarter,
(select max(AmountFinanced) -- or sum
from Finance_Table ftsq
where ftsq.ActivationYear = ft.ActivationYear
and ftsq.ActivationQuarter = ft.ActivationQuarter
) as AmountFinanced,
ChargeOffAmount
from Finance_Table ft
为了更好地理解其工作原理,让我们考虑一下ActivationYear = 2015和ActivationQuarter = 3的记录块。然后,子查询变为
select max(AmountFinanced)
from Finance_Table ftsq
where ftsq.ActivationYear = 2015
and ftsq.ActivationQuarter = 3
因此,子查询会拉出表格的一部分,在该部分上汇总聚合,对于此示例,结果为101263.00,并将该结果应用于AmountFinanced列。由于我们使用变量而不是数字2015和3,因此能够对表中的每条记录进行正确的操作。
*作为旁注,更安全的方法是使用排名,无论AmountFinanced列中的数据如何,都是健壮的。但是你现在可能已经足够咀嚼了。