2014-01-08 26 views
0

我試圖創建一個更新查詢工作過的查詢更新查詢不保存正確的值

的有ChargeTransaction和ChargeError之間的1->中號的關係 ChargeBody是包含JSON文本字段。

當我運行內部查詢時,我得到了chargetransactionid和帳戶標識(1,2和3)的明確列表,但是當我將它放入UPDATE語句中時,它會爲所有chargetransactions指定一個3的accountid。

UPDATE ChargeTransaction 
    SET AccountId= a.AccountID 
FROM 
    ( 
     SELECT ChargeTransactionId, AccountID 
     FROM 
     (
      SELECT 
        [ChargeTransactionId], 
        CASE WHEN ChargeBody LIKE '%"ReceivingFacility":"998001"%' THEN 1 
         WHEN ChargeBody LIKE '%"ReceivingFacility":"998002"%' THEN 2 
         WHEN ChargeBody LIKE '%"ReceivingFacility":"998003"%' THEN 3 
         ELSE 1 
        END AS AccountId, 
        ChargeBody 
       FROM [ChargesDashboard].[dbo].[ChargeError] 
     ) b 
     GROUP BY ChargeTransactionId, AccountId 
    ) a 
WHERE ChargeTransactionId=a.ChargeTransactionId ; 

回答

0

原來,問題是,ChargeTransaction表沒有一個ChargeTransactionId場,它有一個ID字段

UPDATE ChargeTransaction 
    SET AccountId= a.AccountID 
FROM 
    ( 
     SELECT ChargeTransactionId, AccountID 
     FROM 
     (
      SELECT 
        [ChargeTransactionId], 
        CASE WHEN ChargeBody LIKE '%"ReceivingFacility":"998001"%' THEN 1 
         WHEN ChargeBody LIKE '%"ReceivingFacility":"998002"%' THEN 2 
         WHEN ChargeBody LIKE '%"ReceivingFacility":"998003"%' THEN 3 
         ELSE 1 
        END AS AccountId, 
        ChargeBody 
       FROM [ChargesDashboard].[dbo].[ChargeError] 
     ) b 
     GROUP BY ChargeTransactionId, AccountId 
    ) a 
WHERE ChargeTransaction.Id=a.ChargeTransactionId ; 
2

這可能不是最優雅的,但我認爲它會奏效。我認爲問題是你想加入你的派生表。

with myCte as 
(
SELECT ChargeTransactionId, AccountID 
     FROM 
     (
      SELECT 
        [ChargeTransactionId], 
        CASE WHEN ChargeBody LIKE '%"ReceivingFacility":"998001"%' THEN 1 
         WHEN ChargeBody LIKE '%"ReceivingFacility":"998002"%' THEN 2 
         WHEN ChargeBody LIKE '%"ReceivingFacility":"998003"%' THEN 3 
         ELSE 1 
        END AS AccountId, 
        ChargeBody 
       FROM [ChargesDashboard].[dbo].[ChargeError] 
     ) b 
     GROUP BY ChargeTransactionId, AccountId 
) 

UPDATE C 
set AccountID = myCte.AccountID 
from ChargeTransaction C 
    inner join myCte on C.ChargeTransactionId = myCte.ChargeTransactionId