1

我对 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 服务器上。

提前致谢

4

1 回答 1

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
于 2012-07-24T14:23:33.640 回答