我对SQL比较陌生,请原谅我的无知......
我有三个表,SRS_CAP,SRS_IPF和SRS_URA。
我想将数据从SRS_IPF复制到SRS_URA,其中(某些)SRS_IPF的主键与SRS_CAP的主键相同。
具体来说,这是我出现问题的地方,我想将SRS_IPF中的多行复制到SRS_URA中的一行。下面的脚本说明了我想要实现的目标,但不打算工作 - 必须有一个更有效的方法(实际上有效的方法!):
INSERT INTO srs_ura
(ura_stuc, ura_seqn, ura_stat, ura_name, ura_orgn, ura_add1)
SELECT ipf_ipuc, mySEQ, 'GP',
(SELECT ipf_valu
FROM srs_ipf
WHERE ipf_code = 'IPQ_REF1TIT'
AND ipf_ippc = CAP_MCRC
AND ipf_ipuc = CAP_STUC),
(SELECT ipf_valu
FROM srs_ipf
WHERE ipf_code = 'IPQ_REF1ORG'
AND ipf_ippc = CAP_MCRC
AND ipf_ipuc = CAP_STUC,
(SELECT ipf_valu
FROM srs_ipf
WHERE ipf_code = 'IPQ_REF1AL1'
AND ipf_ippc = CAP_MCRC
AND ipf_ipuc = CAP_STUC)
FROM srs_ipf, srs_cap
WHERE ipf_ippc = CAP_MCRC AND ipf_ipuc = CAP_STUC;
如您所见 - 我想重复将ipf_valu字段插入srs_ura中的多个列,但srs_ipf中同一行的ipf_code不同。
所以我的问题是,我应该研究哪些SQL编程领域,以实现上述目标?
我还有关于自动排序和NCLOB的更多问题,但我稍后会解决这些问题。我在Oracle服务器上。
提前致谢
答案 0 :(得分:1)
此选择是否返回要插入的行?
SELECT ipf_ipuc, /*mySEQ,*/ 'GP',
MAX(CASE WHEN ipf_code = 'IPQ_REF1TIT' THEN ipf_valu END),
MAX(CASE WHEN ipf_code = 'IPQ_REF1ORG' THEN ipf_valu END),
MAX(CASE WHEN ipf_code = 'IPQ_REF1AL1' THEN ipf_valu END)
FROM srs_ipf, srs_cap
WHERE ipf_ippc = CAP_MCRC AND ipf_ipuc = CAP_STUC
AND ipf_code IN ('IPQ_REF1TIT', 'IPQ_REF1ORG', 'IPQ_REF1AL1')
GROUP BY ipf_ipuc