我对SQL比较陌生,所以请原谅我的无知……
我有三张桌子,SRS_CAP,SRS_IPF和SRS_URA。
我想将数据从SRS_IPF复制到SRS_URA,其中SRS_IPF的(某些)主键等于SRS_CAP的主键。
具体地说,这就是我的问题所在,我想在SRS_URA中将多行从SRS_IPF复制到一行。下面的脚本说明了我想要实现的东西,但并不是为了工作--必须有一个更有效的方法(而且是一个实际有效的方法!):
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编程的哪个领域?
我还有更多关于自动排序和NCLOBs的问题,但我将在稍后解决这些问题。我在Oracle服务器上。
提前感谢
发布于 2012-07-24 22:23:34
此select是否返回您想要插入的行?
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_ipuchttps://stackoverflow.com/questions/11632809
复制相似问题