2017-07-18 39 views
0

如何從相同ID的相同表中更新Opportunity_Record_Type,Opportunity_Division和Fiscal_Period? PK是Opportunity_ID。使用同一表中的各個ID更新表中的列。

+--------------------+-------------------------+----------------------+---------------+-----------------------+--------------------------+ 
| Opportunity_ID  | Opportunity_Record_Type | Opportunity_Division | Fiscal_Period | Script_Execution_Week | Script_Execution_Quarter | 
+--------------------+-------------------------+----------------------+---------------+-----------------------+--------------------------+ 
| LKASDJKLkasdkl23k4 | NULL     | NULL     | NULL   | 2017-21    | 2017-Q2     | 
| LKASDJKLkasdkl23k4 | NULL     | NULL     | NULL   | 2017-22    | 2017-Q2     | 
| LKASDJKLkasdkl23k4 | NULL     | NULL     | NULL   | 2017-23    | 2017-Q2     | 
| LKASDJKLkasdkl23k4 | NULL     | NULL     | NULL   | 2017-24    | 2017-Q2     | 
| LKASDJKLkasdkl23k4 | NULL     | NULL     | NULL   | 2017-25    | 2017-Q2     | 
| LKASDJKLkasdkl23k4 | Services    | SBS     | 2017-Q2  | 2017-26    | 2017-Q3     | 
| LKASDJKLkasdkl23k4 | Services    | SBS     | 2017-Q2  | 2017-27    | 2017-Q3     | 
| LKASDJKLkasdkl23k4 | Services    | SBS     | 2017-Q2  | 2017-28    | 2017-Q3     | 
| LKASDJKLkasdkl23k4 | NULL     | NULL     | NULL   | 2017-7    | 2017-Q1     | 
| LKASDJKLkasdkl23k4 | NULL     | NULL     | NULL   | 2017-8    | 2017-Q1     | 
| LKASDJKLkasdkl23k4 | NULL     | NULL     | NULL   | 2017-9    | 2017-Q1     | 
| SDFSDKLJ2ELKMLKASM | NULL     | NULL     | NULL   | 2017-20    | 2017-Q2     | 
| SDFSDKLJ2ELKMLKASM | NULL     | NULL     | NULL   | 2017-21    | 2017-Q2     | 
| SDFSDKLJ2ELKMLKASM | NULL     | NULL     | NULL   | 2017-22    | 2017-Q2     | 
| SDFSDKLJ2ELKMLKASM | NULL     | NULL     | NULL   | 2017-23    | 2017-Q2     | 
| SDFSDKLJ2ELKMLKASM | NULL     | NULL     | NULL   | 2017-24    | 2017-Q2     | 
| SDFSDKLJ2ELKMLKASM | NULL     | NULL     | NULL   | 2017-25    | 2017-Q2     | 
| SDFSDKLJ2ELKMLKASM | Mobile     | Mobile    | 2017-Q2  | 2017-26    | 2017-Q3     | 
| SDFSDKLJ2ELKMLKASM | Mobile     | Mobile    | 2017-Q2  | 2017-27    | 2017-Q3     | 
| SDFSDKLJ2ELKMLKASM | Mobile     | Mobile    | 2017-Q2  | 2017-28    | 2017-Q3     | 
+--------------------+-------------------------+----------------------+---------------+-----------------------+--------------------------+ 
+1

要知道,對於這個問題的目的,opportunity_id可能是一些簡單 – Strawberry

回答

1

你可以做

UPDATE table1 t JOIN (
    SELECT Opportunity_ID, Opportunity_Record_Type, Opportunity_Division, Fiscal_Period 
    FROM table1 
    WHERE Opportunity_Record_Type IS NOT NULL 
    AND Opportunity_Division IS NOT NULL 
    AND Fiscal_Period IS NOT NULL 
    GROUP BY Opportunity_ID, Opportunity_Record_Type, Opportunity_Division, Fiscal_Period 
) q 
    ON t.Opportunity_ID = q.Opportunity_ID 
    SET t.Opportunity_Record_Type = q.Opportunity_Record_Type, 
     t.Opportunity_Division = q.Opportunity_Division, 
     t.Fiscal_Period = q.Fiscal_Period 
WHERE t.Opportunity_Record_Type IS NULL 
    OR t.Opportunity_Division IS NULL 
    OR t.Fiscal_Period IS NULL 

這裏是一個dbfiddle演示

+0

謝謝。這對我有效。 – nomad

0

根據你的意見更新。我相信你需要一個內部連接來實現你正在嘗試做的事情。請在我寫'YourTableName'的地方放置你的表名。您將加入3個不同的子查詢,這將爲該特定ID的列提取不同的值。

UPDATE test 
SET Opportunity_Record_Type = join1.Opportunity_Record_Type, 
    Opportunity_Division = join2.Opportunity_Division, 
    Fiscal_Period = join3.Fiscal_Period 
FROM 'YourTableName' test 
    INNER JOIN (
     SELECT DISTINCT Opportunity_ID, Opportunity_Record_Type 
     FROM 'YourTableName' 
     WHERE Opportunity_Record_Type IS NOT NULL) join1 ON join1.Opportunity_ID = test.Opportunity_ID 
    INNER JOIN (
     SELECT DISTINCT Opportunity_ID, Opportunity_Division 
     FROM 'YourTableName' 
     WHERE Opportunity_Division IS NOT NULL) join2 ON join2.Opportunity_ID = test.Opportunity_ID 
    INNER JOIN (SELECT DISTINCT Opportunity_ID, Fiscal_Period 
     FROM 'YourTableName' 
     WHERE Fiscal_Period IS NOT NULL) join3 ON join3.Opportunity_ID = test.Opportunity_ID 
+0

不,先生。對於每個ID,我想更新他們的3個指定的列,它們是NULL,並且具有相同ID的填充值。例如,如果您使用此ID'LKASDJKLkasdkl23k4',我想要更新Opportunity_Record_Type,Opportunity_Division和Fiscal_Period,其值爲2017-26周。 – nomad

+0

根據您的反饋更新我的答案。 – JJWillMC

0

以下是您的一個示例。最好通過插入來獲得,並且當有重複鍵更新值時。我填充了虛擬數據,因爲我不知道什麼是有效的輸入。

INSERT INTO table (Opportunity_ID,Opportunity_Record_Type,Opportunity_Division,Fiscal_Period) 
VALUES (PK,1,1,1), 
     (PK,1,1,1), 
     (PK,1,1,1), 
     (PK,1,1,1) 
    ON DUPLICATE KEY UPDATE Opportunity_Record_Type=1,Opportunity_Division=1,...; 
相關問題