我的方案是我必须通过基于列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,因此成本。
我正在尝试用光标做。但是因为我是新人所以无法得到理想的结果。
答案 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