在sql中查找缺少的行?

时间:2014-10-20 11:03:42

标签: sql sql-server sql-server-2008

请帮我解决以下问题, 我有下表,A列是季度号,b是货币,c是金额列。 对于例如第1季度有1,2和3种货币,但第2季度和第3季度只有2&3和3种货币。在这种情况下,我想找出丢失的货币并插入上一季度的金额。

 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

季度是序列号,序列中不存在一些季度想要复制上一季度的值,而我们必须检查是否有可用的前一季度和下一季度。

1 个答案:

答案 0 :(得分: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;