2014-10-20 54 views
0

請幫我解決下面的問題, 我有下表,一列是季度no和b作爲貨幣,c作爲金額列。 例如第1季度有1,3貨幣,但第2季度和第3季度只有3和3貨幣。在這種情況下,我想查找缺少的貨幣並插入上一季度金額。在sql中查找缺失的行嗎?

Quarter currency Amount  
1 1 45.000 
1 2 425.000 
1 3 145.000 
3 2 400.000 
3 3 145.000 
4 3 145.000 

輸出:

Quarter currency Amount 
1 1 45.000 
1 2 425.000 
1 3 145.000 
2 1 45.000 
2 2 425.000 
2 3 145.000 
3 1 45.000 
3 2 425.000 
3 3 145.000 
4 1 45.000 
4 2 425.000 
4 3 145.000 

季度是序列號,有些季度不存在序列中要複製上一季度值,並在做我們必須檢查是否缺少季度以前和下個季度應能得到的。

回答

2

這有兩個重要的部分。首先是獲得正確的行。你可以用cross join來做到這一點。那麼你需要獲得上一季度的價值。下面是使用相關子查詢的一種方法:

select q.quarter, c.currency, 
     (select top 1 amount 
     from table t 
     where t.currency = c.currency and t.quarter <= q.quarter 
     order by quarter desc 
     ) amount 
from (select distinct quarter from table) q cross join 
    (select distinct currency from table) c; 
+0

非常感謝您的幫助!季度是序列號,有些季度不存在於希望複製上一季度值的序列中,而我們必須檢查上一季和下一季是否缺失季度應該可用。 – jay 2014-10-24 08:59:22

+0

@jay。 。 。我相信上面的查詢會回答你問的問題。如果你還有其他問題,那麼最好再提一個問題。 – 2014-10-25 13:36:55