使用游标获取多行并将其数据设置为列

Using cursor for fetching multiple rows and setting its data in columns

我的场景是我必须通过在列 quoteid 和 compid

的基础上对两个 tables A 和 B 执行连接来将数据填充到 table
 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

select 季度成本的概念是四分之一代码,它是一年中的季度(第一、二...)和年份的最后两位数的组合。因此,最旧的季度将是 quarter1 ,第二个最旧的将是 quarter2 ,最近的将是 quarter3 。在这里,由于加入条件,最近 3 个季度的成本将可用。例如,这里对于 quoteid 10004 和 compid 1,quarter1 将是 2q09,quarter2 将是 1q10,quarter3 将是 3q10,因此成本。

我想用光标来做。但是由于我是新手所以无法得到想要的结果。

TableA​​好像和你的结果没有关系

基本思路是使用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