2016-07-15 93 views
0

首先對長標題表示歉意,但是我找不到另一個合適的標題 作爲我要解釋的請求: 在db中有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某些領域DO11_DOCTESTATA.DO11_NUMDOC與同場 在DO33_DOCCORPORIF.DO33_NUMNSDOC

當找到一個匹配,我需要更新DO30_DOCCORPO,其中DO11_DOCTESTATA =「FOR-DDT」意思是我更新的數據字段只有當 文檔類型是送貨單('FOR-DDT')。

我已經成功創建了SELECT查詢,它提供了我需要更新的數據,但是我無法將此查詢「轉換」爲更新,因爲我缺少SQL語言的經驗 。這是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匹配的數字

編輯:還停留在這個問題上 編輯:使用folllowing代碼:

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; 

我管理讓管理工作室做一些事情。事實上,在執行後,它說,「行受到影響:1」,但還是有一個問題:該行

AND A.DO30_CAUSMAG_MG51 = '9999' should update WHERE DO30_CAUSMAG_MG51 = '100' 

所以當值是「9999」,但更新行,其中同一列有「100應該讀'作爲價值

回答

0

這是你所需要的?

UPDATE DO30_DOCCORPO 
SET DO30_DOCCORPO.do30_importo=... 
    , ... 
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') 

編輯後評論:現在怎麼樣?

+0

不,更新應該在DO30_DOCCORPO上運行。在那裏,有記錄DO30_PREZZO1,等等,應該更新 –

+0

我在你的評論後編輯我的答案。這是你想要的? –

+0

應該可以,但作爲最後一個請求,我應該在SET部分放什麼? SET DO30_DOCCORPO.DO30_IMPORTO = ???我如何檢索要設置的價格? –

相關問題