使用cursor获取多行并在列中设置其数据

时间:2015-02-28 17:02:28

标签: sql join cursor db2

我的方案是我必须通过基于列quoteid和compid在两个表A和B上执行连接来将数据填充到表中

 Table A                                        
 ------------------------------  
 quoteid    compid ................
 10004        1
 10004        1
 10004        1
 10004        22
 10004        22
 10004        22 

 Table B
 ------------------------------------ 
 quoteid    compid   quartercode    cost
 10004        1          1q10        14
 10004        1          2q09        10 
 10004        1          3q10        12  
 10004        22         4q12        32 
 10004        22         3q11        30 
 10004        22         2q11        43

现在,select查询的结果应该是

 quoteid compid quarter1cost  quarter2cost quarter3cost 
 10004     1         10           14           12
 10004     22        43           30           32

选择季度成本的概念是使用四分之一,即年度(第一,第二......)和年份的最后两位数的组合。因此,最老的季度将是第一季度,第二年龄将是第二季度,最近的季度将是第三季度。在这里,由于加盟条件,最近只有3个季度可以获得成本。例如,这里为quoteid 10004和compid 1,quarter1将是2q09,quarter2将是1q10,quarter3将是3q10,因此成本。

我正在尝试用光标做。但是因为我是新人所以无法得到理想的结果。

1 个答案:

答案 0 :(得分:1)

表A似乎与您的结果无关。

基本思想是使用row_number()和条件聚合。这很复杂,因为季度标识符是向后存储的,所以它没有正确排序。但你仍然可以这样做:

select quoteid, compid,
       max(case when seqnum = 1 then cost end) as cost_q1,
       max(case when seqnum = 2 then cost end) as cost_q2,
       max(case when seqnum = 3 then cost end) as cost_q3
from (select b.*,
             row_number() over (partition by quoteid, compid
                                order by substr(quartercode, 1, 1), substr(quartercode, 3, 2)
                               ) as seqnum
      from b
     ) b
group by quoteid, compid