2017-02-03 84 views
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    1     NULL    0.00 
4    2015    1     NULL    0.00 

,我運行到是AmountFinanced以下數據不應該是NULL,但重複價值的問題。有沒有辦法將QuarterDiff 0的AmountFinanced的值填充到以下QuarterDiff s?

所需的結果(爲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

您是否熟悉SQL中的計算字段?在表中添加一個計算的字段並從中讀取值。 – singhsac

回答

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字段中的數據;也就是說,需要填充的元素爲空,所以它們不會干擾任何聚合。

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列中的數據如何,排名都是穩健的。但你現在可能已經有足夠的咀嚼。

相關問題