2014-01-16 113 views
0

我有一個查詢基於同一個表中的記錄更新表中的記錄的小問題。以下是詳細信息。根據來自同一個表的記錄更新查詢以更新表

Cust_Master

Cust_ID - Reference_ID - Bal_Amount 
---------- 
C100001 - R12345  - 30 
C100002 - R12346  - 0 
C100003 - R12345  - 0 
C100004 - R12347  - 20 
C100005 - R12345  - 0 

我需要的是更新Bal_Amount where Reference_ID = Reference_ID of Cust_ID (C100001),但不應該更新CUST_ID(C100001),這意味着源記錄不應該得到更新。

最後的值應爲C100003和C100005應該得到Bal_Amount爲30

我要求它不能正常工作下面的查詢嘗試。

update Minbo_DB.dbo.Cust_Master 
set Cust_Master.Bal_Amount = Cust_Master2.Bal_Amount 
from Cust_Master 
inner join Cust_Master Cust_Master2 
    ON Cust_Master2.Reference_ID = (select Reference_ID 
            from Cust_Master 
            where Cust_ID='C100001') 
    AND Cust_Master.Cust_ID <> 'C100001' 
where 
    (Cust_Master.Cust_ID <> 'C100001') 
+0

這裏任何意見表示高度讚賞 – Subash

回答

0

你的要求還不完全清楚,所以在這裏我們可以從工作的方法可以改進......

CREATE TABLE #Example 
(
    Cust_ID   VARCHAR(25), 
    Reference_ID VARCHAR(25), 
    Bal_Amount  INT 
) 
INSERT INTO #Example 
    SELECT 'C100001', 'R12345', 30 UNION ALL 
    SELECT 'C100002', 'R12346', 0 UNION ALL 
    SELECT 'C100003', 'R12345', 0 UNION ALL 
    SELECT 'C100004', 'R12347', 20 UNION ALL 
    SELECT 'C100005', 'R12345', 0 


;WITH Aggregation AS 
(
    SELECT Reference_ID, BalMax = MAX(Bal_Amount) 
    FROM #Example 
    GROUP BY Reference_ID 
) 
UPDATE E 
SET Bal_Amount = BalMax 
FROM Aggregation A 
JOIN #Example  E ON A.Reference_ID = E.Reference_ID 
WHERE Bal_Amount != BalMax 


SELECT * 
FROM #Example 
+0

嗨,馬克,我的要求是要更新的所有用相同的參考編號爲C100001除了C100001記錄Bal_Amt。 – Subash

+0

我發佈的代碼是這樣做的嗎? – MarkD

0

大家好我已經得到了解決。以下是答案。

更新Cust_Master設置Cust_Jars_Bal = Cust_Master2.Cust_Jars_Bal 從Cust_Master內加入Cust_Master Cust_Master2 ON Cust_Master.Reference_ID = Cust_Master2.Reference_ID 其中(Cust_Master2.Cust_ID = 'C100001')。

謝謝您的貢獻...

相關問題