最初に長いタイトルをお詫びしますが、別の適切なタイトルを見つけることができませんでした 私は説明します: データベースには3テーブル、1つはドキュメントのヘッダ、1つは関連する詳細のためのもの、 と3種類目は異なる種類のドキュメント間のリンクです(例えば、 の送付状とそれに続く請求書がある場合、通常は月、グループ分けすべて 同月の配達メモ)。関与 テーブルとフィールドが呼び出されます。同じテーブルのレコードを更新して、別のテーブルの共通レコードを検索する
+ DO11_DOCTESTATA (for the headers)
- DO11_DOCUM_MG36 Gives the type of the document stored (I need to retrieve data from 'FOR-FATRIEPDDT' and insert into 'FOR-DDT'
- DO11_NUMDOC Contains the number of the document, needed to search WHERE do11_numdoc = equals the same number in DO33_DOCCORPORIF
+ DO30_DOCCORPO (for the details)
- DO30_PREZZO1 Contains the unity price, when I have a match between do11_numdoc = do33_doccorporif.do33_numnsdoc, I update this field)
- DO30_PREZZO1IVA Same as before, but price added with VAT
- DO30_IMPORTO Price * Quantity
- ...
- ...
+ DO33_DOCCORPORIF (for the links)
- DO33_NUMNSDOC Which contains the number of the relative delivery note that I need to compare to DO11_DOCTESTATA.DO11_NUMDOC to find a match
私は投票された数を一致させることによって、対応する納品書に同じ値を入れて請求書 から価格を更新する必要があるため、私の要求がDO30_DOCCORPOの一部のフィールドを更新することです文書を た場合にのみ、私はデータを更新してることを意味DO33_DOCCORPORIF.DO33_NUMNSDOC
で同じフィールド とDO11_DOCTESTATA.DO11_NUMDOC一致するものが見つかったとき、私は「FOR-DDT」DO11_DOCTESTATA = DO30_DOCCORPO、内のフィールドを更新する必要がありますタイプは配達通知( 'FOR-DDT')です。
更新する必要のあるデータを提供するSELECTクエリを作成できましたが、 SQL言語での経験が不足しているため、このクエリをUPDATEに「変換」できません。これはSELECTクエリです
SELECT do11_doctestata.do11_docum_mg36,
do11_doctestata.do11_datadoc,
do11_doctestata.do11_numdoc,
do11_doctestata.do11_sezdoc,
do33_doccorporif.do33_numnsdoc,
do30_doccorpo.do30_codart_mg66,
do30_doccorpo.do30_qta1,
do30_doccorpo.do30_prezzo1,
do30_doccorpo.do30_prezzo1iva,
do30_doccorpo.do30_importo,
do30_doccorpo.do30_importoiva,
do30_doccorpo.do30_impnetscp
FROM do11_doctestata
INNER JOIN do33_doccorporif
ON do11_doctestata.do11_numdoc = do33_doccorporif.do33_numnsdoc
INNER JOIN do30_doccorpo
ON do11_doctestata.do11_ditta_cg18 =
do30_doccorpo.do30_ditta_cg18
AND do11_doctestata.do11_numreg_co99 =
do30_doccorpo.do30_numreg_co99
WHERE (do11_doctestata.do11_docum_mg36 = 'FOR-DDT')
およびhereは結果のサンプルです。ハイライトされた行は、私が更新する必要が 典型的な行ですが、唯一のときDO11_NUMDOCの番号とDO33_NUMNSDOC一致
編集:私は、管理
MERGE INTO DO30_DOCCORPO A
USING DO30_DOCCORPO_TEMP B
ON A.DO30_PROGRIGA = B.DO30_PROGRIGA
AND A.DO30_NUMREG_CO99 = B.DO30_NUMREG_CO99
AND A.DO30_DITTA_CG18 = B.DO30_DITTA_CG18
AND A.DO30_CAUSMAG_MG51 = '9999'
WHEN MATCHED THEN
UPDATE
SET DO30_PREZZO1 = B.DO30_PREZZO1,
DO30_PREZZO1IVA = B.DO30_PREZZO1IVA,
DO30_IMPORTO = B.DO30_IMPORTO,
DO30_IMPORTOIVA = B.DO30_IMPORTOIVA,
DO30_IMPNETSCP = B.DO30_IMPNETSCP;
:folllowingコードを使用して:まだこの問題 編集に貼り付けManagement Studioに何かをさせるために。実際には、実行した後、それが「影響を受ける行:1」、と言うが、1つの問題がまだあります:値は「9999」が、更新行であるとき、行
AND A.DO30_CAUSMAG_MG51 = '9999' should update WHERE DO30_CAUSMAG_MG51 = '100'
ので、それは読んでください同じ列には、「100を有する場合'値として
いいえ、更新はDO30_DOCCORPOで機能するはずです。そこにはレコードlke DO30_PREZZO1などがありますので、更新する必要があります –
あなたのコメントの後に自分の答えを編集しました。これはあなたが探しているものですか? –
大丈夫ですが、最後のリクエストとして、SET部分に何を書き込む必要がありますか? SET DO30_DOCCORPO.DO30_IMPORTO = ???どのように設定する価格を取得することができますか? –