1

私はSQLに比較的慣れていないので、私の無知を許してください...

SRS_CAP、SRS_IPF、SRS_URA の 3 つのテーブルがあります。

SRS_IPF の主キー (の一部) が SRS_CAP の主キーと等しい SRS_IPF から SRS_URA にデータをコピーしたいと考えています。

具体的には、ここで問題が発生します。複数の行を SRS_IPF から SRS_URA の 1 つの行にコピーしたいと考えています。以下のスクリプトは、私が達成したいことを示していますが、動作するようには意図されていません。より効率的な方法 (そして実際に動作する方法) が必要です。

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; 

ご覧のとおり、srs_ura の複数の列に ipf_valu フィールドを繰り返し挿入したいのですが、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 に答える