在日常开发过程中,我们经常遇上一种情况,首次输入的时候,表格显示空值,当第二次输入的时候,我们就可以直接在表格里面修改数据,直接提交即可;
思路:
这里就需要一个临时表,首先将值数据给读取出来,如果没有则为空。如果有则加入到临时表中,最后读取临时表即可。
delete from Q1;
insert into Q1(C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11)
select pp.ftargetnm 指标,aqt.fqseq FQSEQ,aqt.FPFID FPFID,aqt.ftargetno 指标代码,aqt.fpdcontet 评判内容
,aqt.fvalue 权重,aqt.fpdfactor 评价依据,aqt.fpdbase 评分原则,101 as fseq , '' as 结果与数量, '' as 得分
from pf_tbs_applyquantiz aqt,pf_tbc_pftbld pp
where aqt.ftargetno =pp.ftargetno
and aqt.ftargetno='3.2.1'
;
update Q1 set (C10,C11) =(select FRESULT,FSCORE
from pf_tbs_applyqVal a
where fseq=Q1.C9 and ftargetno=Q1.C4 and A.fqseq=Q1.C2)
;
select C1 指标,C2 FQSEQ,C3 FPFID,C4 指标代码,C5 评判内容
,C6 权重,C7 评价依据,C8 评分原则,C9 as fseq ,C10 as 结果与数量,C11 as 得分
from Q1;
接着,还有个就是一个id对应的某个字段有多个值,我们需要将值合并到同一个单元格上。
假设
一个fseq对应fdptnm有多的时候
fseq fdptnm
2 a/b/d
3 a/c/t
select xmlelement("root",xmlagg(xmlforest(xmlforest(
t.fseq, replace(WMSYS.WM_CONCAT(t.fdptnm),',','/') fdptnm
) TBL))).getclobval()
from pf_tbs_applydpt t
group by t.fseq;
这里主要是的WMSYS.WM_CONCAT分组排序函数的,绝对不能少了group by聚合函数的使用,否则会报错。