此問題的一個快速的解決方案是使用一個子查詢對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字段中的數據;也就是說,需要填充的元素爲空,所以它們不會干擾任何聚合。
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列中的數據如何,排名都是穩健的。但你現在可能已經有足夠的咀嚼。
您是否熟悉SQL中的計算字段?在表中添加一個計算的字段並從中讀取值。 – singhsac